Innhold

# Formatering av kantlinjer i Calc med makroer

Ved å bruke Basic eller Python programmeringsspråk er det mulig å skrive makroer som bruker formater på celleområder i Calc.

## Formatering av kantlinjer i Celleområder

Kodestykket nedenfor oppretter en Sub kalt FormatCellBorder som bruker nye kantformater på en gitt områdeadresse i det gjeldende Calc -arket.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            'Oppretter UNO -strukturen som lagrer 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
            'Får målcellen
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            'Bruker det nye formatet for alle kantlinjer
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Sub beskrevet ovenfor inneholder fire argumenter:

- cellAddress er en streng som angir området som skal formateres i formatet "A1".

- newStyle er et heltall som tilsvarer grenselinjestilen (se Linjestiler nedenfor).

- newWidth er en heltallsverdi som definerer linjetykkelsen.

- newColor er et heltall som tilsvarer en farge som er definert med funksjonen RGB .

For å anrope FormatCellBorder , opprett en ny makro og send inn de ønskede argumentene, som vist nedenfor:

        Sub MyMacro
            'Gir tilgang til linjestilkonstantene
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            'Formater "B5" med kompakte blå kanter
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            'Formaterer alle kantlinjer i området "D2: F6" med røde prikkete kanter
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Det er mulig å implementere den samme 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 -tjeneste for å få tilgang 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

Kodestykket nedenfor implementerer en makro som heter myMacro som anroper 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))

Python -koden som presenteres ovenfor bruker ScriptForge bibllioteket som er tilgjengelig siden LibreOffice 7.2.

## Linjestiler

Linjestiler er definert som heltallskonstanter. Tabellen nedenfor viser konstantene for linjestilene som er tilgjengelige i Format - Celler - Kantlinjer :

Konstantnavn | Heltallsverdi | Linjestilnavn
--- | --- | ---
SOLID | 0 | Kompakt
DOTTED | 1 | Prikket
DASHED | 2 | Stiplet
FINE_DASHED | 14 | Finstiplet
DOUBLE_THIN | 15 | Dobbelt tynn
DASH_DOT | 16 | Bindestrekprikk
DASH_DOT_DOT | 17 | Bindestrek prik prikk

Referer til BorderLineStyle Konstant referanse i LibreOffice API -dokumentasjonen for å lære mer om linestilkonstanter.

## Formatering av kantlinjer ved hjelp av TableBorder2

Områdeobjekter har en egenskap som heter TableBorder2 som kan brukes til å formatere områdegrenselinjer slik det gjøres i Format - Celler - Kantlinjer dialogboksen i Linjearrangement seksjonen.

I tillegg til øvre, nedre, venstre og høyre kant, definerer TableBorder2 også vertikale og horisontale kantlinjer. Makroen nedenfor gjelder bare ø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 lagrer 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
            'Bruker tabellformatet for 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 slik:

        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

Refer to the TableBorder2 Strukturreferanse i LibreOffice API -dokumentasjonen for å lære mer om attributtene.

Lignende emner

ScriptForge-biblioteket

Supporter oss!