Indhold

# Formatering af kanter i Calc med makroer

Ved at bruge programmeringssprogene Basic eller Python er det muligt at skrive makroer, som bruger formater på celleområder i Calc.

## Formatering af kanter i celleområder

Kodestumpen herunder opretter en Sub kaldet FormatCellBorder, der anvender nye kantformater på en givet områdeadresse i det aktuelle Calc-ark.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Opretter den UNO-struktur, som lagrer det nye linjeformat
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            'Henter målcellen
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Anvender det nye format på alle kanter
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Sub'en, der er beskrevet ovenfor bruger fire argumenter:

- CelleAddress er en streng, som angiver det område. der skal formateres i formatet "A1".

- ny typografi er en heltalsværdi, der svarer til kanttypografien (se Linjetypografier herunder).

- newWidth er en heltalsværdi, der definerer linjetykkelsen.

- nyFarve er en heltalsværdi, der svarer til farve, der er defineret med RGB-funktionen.

For at kalde FormatCellBorder opretter du en makro og videresender de ønskede argumenter som vist herunder:

        Sub MyMacro
            ' Giver adgang linjetypografi-konstanterne
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Formaterer "B5" med kraftige blå kanter
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Formaterer alle kanter i området "D2:F6" med røde stiplede kanter
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Det er muligt at implementere den samme funktionalitet i Python:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Definerer det nyt linjeformat
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Scriptforge-tjeneste til give adgang til celleområder
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Kodestumpen herunder implementerer en makro ved navn myMacro, der kalder 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))

Den Python-kode, der blev præsenteret herover bruger ScriptForge-biblioteket, der har været tilgængeligt siden LibreOffice 7.2.

## Linjetypografier

Linjetypografier er defineret som heltalskonstanter. Tabellen herunder oplister konstanter de linjetypografier, der er tilgængelige i Formatér ▸ Celler ▸ Kanter:

Konstantnavn | Heltalsværdi | Linjetypografi-navn
--- | --- | ---
SOLID | 0 | Kraftig
DOTTED | 1 | Prikket
DASHED | 2 | Stiplet
FINE_DASHED | 14 | Fint stiplet
DOUBLE_THIN | 15 | Dobbelt tynd
DASH_DOT | 16 | Bindestreg-prik
DASH_DOT_DOT | 17 | Bindestreg-prik-prik

Se Kantlinje-konstant Oversigt i LibreOffices API-dokumentation for at få mere at vide om Linjetypografi-konstanter.

## Formatering af kantlinjer med TableBorder2

Områdeobjekter har en egenskab kaldet TableBorder2, der kan bruges til at formatere områdets kantlinjer som det gøres i dialogen Formatér ▸ Celler ▸ Kanter i sektionen LinjePlacering.

Udover over-, under-, venstre og højre kant definerer TableBorder2 også lodrette og vandrette kantlinjer. Makroen herunder anvender kun over- og kanter på området "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Definerer det nye linjeformat
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Struktur, der lagrer den nye TableBorder2 definition
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Anvender tabelformatet på området "B2:E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

Makroen kan implementeres i Python som følger:

        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

Se TableBorder2 strukturoversigt i LibreOffices API-dokumentation for at få mere at vide om dens attrubutter.

Relaterede emner

Biblioteket ScriptForge