Inhalte

# Formatierung von Rändern in Calc mit Makros

Makros für die Formatierung von Zellbereichen in Calc können in den Programmiersprachen Basic oder Python geschrieben werden.

## Ränder in Zellbereichen formatieren

Der folgende Codeausschnitt erstellt ein Sub namens FormatCellBorder, das neue Rahmenformate auf eine bestimmte Bereichsadresse in der aktuellen Calc-Tabelle anwendet.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Erstellt die UNO-Struktur, die das neue Zeilenformat speichern wird
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Ruft die Zielzelle auf
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Wendet das neue Format auf alle Rahmen an
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Das oben beschriebene Sub enthält vier Argumente:

- cellAddress ist eine Zeichenfolge, die den Bereich festlegt, der im Format "A1" formatiert werden soll.

- newStyle ist ein ganzzahliger Wert, der dem Rahmenlinienstil entspricht (siehe Linienstile weiter unten).

- newWidth ist ein ganzzahliger Wert, der die Linienstärke festlegt.

- newColor ist ein ganzzahliger Wert, der einer Farbe entspricht, die mit der Funktion RGB festgelegt wurde.

Um FormatCellBorder aufzurufen, ein neues Makro erstellen und die gewünschten Argumente übergeben, wie unten gezeigt:

        Sub MyMacro
            ' Ermöglicht den Zugriff auf die Linienstil-Konstanten
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Formatiert "B5" mit durchgezogenem blauen Rahmen
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Formatiert alle Rahmen im Bereich "D2:F6" mit rot gepunkteten Rändern
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Es ist möglich, die gleiche Funktionalität in Python zu implementieren:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Definiert das neue Linienformat
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Dienst Scriptforge für den Zugriff auf Zellbereiche
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Der folgende Codeausschnitt implementiert ein Makro mit dem Namen myMacro, das formatCellBorder aufruft:

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

Der oben vorgestellte Python-Code verwendet die Bibliothek ScriptForge, die seit LibreOffice 7.2 verfügbar ist.

## Linienstile

Linienstile werden durch ganzzahlige Konstanten definiert. In der folgenden Tabelle sind die Konstanten für die verfügbaren Linienstile unter Format – Zellen… – Register: Umrandung aufgeführt:

Name der Konstanten | Ganzzahliger Wert | Name des Linienstils
--- | --- | ---
SOLID | 0 | Durchgängig
DOTTED | 1 | Gepunktet
DASHED | 2 | Gestrichelt
FINE_DASHED | 14 | Fein gestrichelt
DOUBLE_THIN | 15 | Fein doppelt
DASH_DOT | 16 | Strich-Punkt
DASH_DOT_DOT | 17 | Strich-Punkt-Punkt

Weitere Details über die Konstanten der Linienstile sind auf der englischen Seite BorderLineStyle Constant Reference in der Dokumentation zur LibreOffice-API zu finden.

## Umrandungen formatieren mit TableBorder2

Bereichsobjekte haben eine Eigenschaft namens TableBorder2, die zum Formatieren der Bereichsumrandungen verwendet werden kann, genauso wie sie im Dialog Format – Zellen… – Register: Umrandungen im Bereich Linienanordnung formatiert werden können.

Zusätzlich zu den oberen, unteren, linken und rechten Umrandungen kann TableBorder2 auch vertikale und horizontale Umrandungen festlegen. Das Makro unten wendet nur die obere und untere Umrandung auf den Bereich "B2:E5" an.

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Legt das neue Linienformat fest
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Struktur, die die neue Definition von TableBorder2 speichert
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Wendet das Tabellenformat auf den Bereich "B2:E5" an
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

Das Makro kann in Python wie folgt implementiert werden:

        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

Weitere Details über die Eigenschaften sind auf der englischen Seite TableBorder2 Struct Reference in der Dokumentation zur LibreOffice-API zu finden.

Verwandte Themen

Die Bibliothek ScriptForge

Bitte unterstützen Sie uns!