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:

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))
  
note

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 Formater ▸ 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


tip

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 Formater - 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
  
tip

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


Støt os venligst!