Formatering av kantlinjer i Calc med makroar

Ved å bruka programmeringsspråka Basic eller Python er det mogleg å skriva makroar som brukar format på celleområde i Calc.

Formatering av kantlinjer i Celleområde

Kodesnutten nedanfor lagar ein Sub kalla FormatCellBorder som brukar nye kantformat på ei gjeve områdeadresse i det gjeldande Calc-arket.


    Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
        ' Lagar UNO -strukturen som lagrar det nye linjeformatet
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = newStyle
        lineFormat.LineWidth = newWidth
        If Not IsMissing(newColor) Then lineFormat.Color = newColor
        ' Hentar målcella
        Dim oCell as Object
        Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
        ' Brukar det nye formatet på alle kantlinjene
        oCell.TopBorder = lineFormat
        oCell.RightBorder = lineFormat
        oCell.LeftBorder = lineFormat
        oCell.BottomBorder = lineFormat
    End Sub
  

Sub omtala ovanfor inneheld fire argument:

For å kalla opp FormatCellBorder, lagar du ein ny ny makro og vidaresender dei ønskte argumenta som vist nedanfor:


    Sub MyMacro
        ' Gjev tilgang til linjestilkonstantane
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Formater "B5" med einsfarga blå kantar
        FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
        ' Formaterer alle kantlinjene i området «D2: F6» med raude, prikkete kantar
        FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
    End Sub
  

Det er mogleg å bruka den same funksjonaliteten i Python:


    from uno import createUnoStruct
    from scriptforge import CreateScriptService
    
    def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
        # Definerer det nye linjeformatet
        line_format = createUnoStruct("com.sun.star.table.BorderLine2")
        line_format.LineStyle = newStyle
        line_format.LineWidth = newWidth
        line_format.Color = newColor
        # Scriptforge-teneste for å få tilgang til celleområde
        doc = CreateScriptService("Calc")
        cell = doc.XCellRange(cellAddress)
        cell.TopBorder = line_format
        cell.RightBorder = line_format
        cell.LeftBorder = line_format
        cell.BottomBorder = line_format
  

Kodesnutten nedanfor implementerer makroen myMacro som kallar opp formatCellBorder:


    from com.sun.star.table import BorderLineStyle as cStyle
    
    def myMacro():
        bas = CreateScriptService("Basic")
        formatCellBorder("B5", cStyle.SOLID, 20, bas.RGB(0, 0, 255))
        formatCellBorder("D2:F6", cStyle.DOTTED, 20, bas.RGB(255, 0, 0))
  
note

Python-koden som er vist ovanfor brukar ScriptForge-biblioteket som er tilgjengeleg sidan LibreOffice 7.2.


Linjestilar

Linjestilar er definerte som heiltalskonstantar. Tabellen nedanfor viser konstantane for linjestilane som er tilgjengelege i Format → Celler → Kantlinjer :

Konstantnamn

Heiltalsverdi

Linjestilnamn

SOLID

0

Einsfarga

DOTTED

1

Prikka

DASHED

2

Streka

FINE_DASHED

14

Finstreka

DOUBLE_THIN

15

Dobbel tynn

DASH_DOT

16

Strek punkt

DASH_DOT_DOT

17

Strek punkt punkt


tip

Sjå kantlinjestil, konstantreferanse i LibreOffice API-dokumentasjonen for å læra meir om linestilkonstantar.


Formatering av kantlinjer ved hjelp av TableBorder2

Områdeobjekt har ein eigenskap som heiter TableBorder2. Denne kan brukast til å formatera områdegrenselinjer slik det vert gjort i fana Kantlinjer i dialogvindauget Format → Celler → Kantlinjer .

I tillegg til øvre, nedre, venstre og høgre kant, definerer TableBorder2 også loddrette og vassrette kantlinjer. Makroen nedanfor gjeld berre øvre og nedre kantlinje for området «B2: E5».


    Sub TableBorder2Example
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Definerer det nye linjeformatet
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = cStyle.SOLID
        lineFormat.LineWidth = 15
        lineFormat.Color = RGB(0, 0, 0)
        ' Struktur som lagrar den nye TableBorder2-definisjonen
        Dim tableFormat as New com.sun.star.table.TableBorder2
        tableFormat.TopLine = lineFormat
        tableFormat.BottomLine = lineFormat
        tableFormat.IsTopLineValid = True
        tableFormat.IsBottomLineValid = True
        ' Brukar tabellformatet for området «B2: E5»
        Dim oCell as Object
        oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
        oCell.TableBorder2 = tableFormat
    End Sub
  

Makroen kan implementerast slik i Python:


    from com.sun.star.table import BorderLineStyle as cStyle
    from scriptforge import CreateScriptService
    
    def tableBorder2Example():
        bas = CreateScriptService("Basic")
        line_format = createUnoStruct("com.sun.star.table.BorderLine2")
        line_format.LineStyle = cStyle.SOLID
        line_format.LineWidth = 18
        line_format.Color = bas.RGB(0, 0, 0)
        table_format = createUnoStruct("com.sun.star.table.TableBorder2")
        table_format.TopLine = line_format
        table_format.BottomLine = line_format
        table_format.IsTopLineValid = True
        table_format.IsBottomLineValid = True
        doc = CreateScriptService("Calc")
        cell = doc.XCellRange("B2:E5")
        cell.TableBorder2 = table_format
  
tip

Sjå TableBorder2 Strukturreferanse i LibreOffice API-dokumentasjonen for å læra meir om attributta.


Støtt oss!