Inhoud

# Randen opmaken in Calc met macro's

Door Basic of Python programmeertalen te gebruiken is het mogelijk om macro's te schrijven die opmaak toepassen op celbereiken in Calc.

## Randen opmaken in celbereiken

Het onderstaande codefragment creëert een Sub genaamd FormatCellBorder die nieuwe randopmaak toepast op een bepaald bereikadres in het huidige Calc-blad.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Creëert de UNO-struct die de nieuwe lijnopmaak zal opslaan
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Haalt de doelcel op
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Past de nieuwe indeling toe op alle randen
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

De hierboven beschreven Sub heeft vier argumenten:

- cellAddress is een tekenreeks die het bereik aangeeft dat moet worden opgemaakt in het formaat "A1".

- newStyle is een geheel getal dat overeenkomt met de randstijl (zie Lijnstijlen hieronder).

- newWidth is een geheel getal dat de lijndikte definieert.

- newColor is een geheel getal dat overeenkomt met een kleur die is gedefinieerd met behulp van de functie RGB.

Om FormatCellBorder aan te roepen, maakt u een nieuwe macro en geeft u de gewenste argumenten door, zoals hieronder weergegeven:

        Sub MyMacro
            ' Geeft toegang tot de lijnstijlconstanten
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Opmaak "B5" met effen blauwe randen
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Maakt alle randen in het bereik "D2:F6" op met rode gestippelde randen
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Het is mogelijk om dezelfde functionaliteit in Python te implementeren:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Definieert de nieuwe lijnopmaak
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Scriptforge-service om toegang te krijgen tot celbereiken
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Het onderstaande codefragment implementeert een macro met de naam myMacro die formatCellBorder aanroept:

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

De hierboven weergegeven Python-code gebruikt de ScriptForge-bibliotheek die beschikbaar is sinds LibreOffice 7.2.

## Lijnstijlen

Lijnstijlen worden gedefinieerd als geheeltallige constanten. In de onderstaande tabel staan de constanten voor de lijnstijlen die beschikbaar zijn in Opmaak - Cel(len) - Randen:

Naam Constante | Geheel getal | Naam van de Lijnstijl
--- | --- | ---
SOLID | 0 | Vast
DOTTED | 1 | Gestippeld
DASHED | 2 | Streepjes
FINE_DASHED | 14 | Fijne streepjes
DOUBLE_THIN | 15 | Dubbeldun
DASH_DOT | 16 | Streep punt
DASH_DOT_DOT | 17 | Streep punt punt

Bekijk BorderLineStyle Constant Reference in de LibreOffice API-documentatie voor meer informatie over lijnstijlconstanten.

## Randen opmaken met TableBorder2

Bereikobjecten hebben een eigenschap met de naam TableBorder2 die kan worden gebruikt om bereikranden op te maken zoals wordt gedaan in het dialoogvenster Opmaak - Cel(len) - Rand(en) in het gedeelte Lijnschikking.

Naast boven-, onder-, linker- en rechterranden definieert TableBorder2 ook verticale en horizontale randen. De onderstaande macro past alleen de boven- en onderranden toe op het bereik "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Definieert de nieuwe lijnopmaak
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Struct die de nieuwe TableBorder2-definitie opslaat
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Past de tabelopmaak toe op het bereik "B2: E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

De macro kan als volgt in Python worden geïmplementeerd:

        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

Bekijk TableBorder2 Struct Reference in de LibreOffice API-documentatie voor meer informatie over de kenmerken ervan.

Verwante onderwerpen

De ScriptForge bibliotheek