Innhald
Innhaldsliste 🔎︎

# 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:

- cellAddress er ein streng som gjev området som skal formaterast i formatet "A1".

- nyStil er ein heiltalsverdi som svarar til kantlinjestilen (sjå Linjestilar nedanfor).

- nyBreidde er ein heiltalsverdi som definerer linjebreidda.

- newColor er eit heiltal som svarar til ein farge som er definert med funksjonen RGB .

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

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

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

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

Liknande emne

ScriptForge-biblioteket