Inhalte
Index 🔎︎

# 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 angibt, 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 Linienbreite festlegt.

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

Um FormatCellBorder aufzurufen, erstellen Sie ein neues Makro und übergeben Sie die gewünschten Argumente, 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 selbe Funktionalität in Pyhton 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, welche seit LibreOffice 7.2 verfügbar ist.

## Linienstile

Line styles are defined as integer constants. The table below lists the constants for the line styles available in Format - Cells - Borders:

Constant name | Integer value | Line style name
--- | --- | ---
SOLID | 0 | Solid
DOTTED | 1 | Gepunktet
DASHED | 2 | Dashed
FINE_DASHED | 14 | Fine dashed
DOUBLE_THIN | 15 | Double thin
DASH_DOT | 16 | Dash dot
DASH_DOT_DOT | 17 | Dash dot dot

Refer to the BorderLineStyle Constant Reference in the LibreOffice API documentation to learn more about line style constants.

## Formatting Borders Using TableBorder2

Range objects have a property named TableBorder2 that can be used to format range borders as it is done in the Format - Cells - Borders dialog in the Line Arrangement section.

In addition to top, bottom, left and right borders, TableBorder2 also defines vertical and horizontal borders. The macro below applies only the top and bottom borders to the range "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Defines the new line format
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Struct that stores the new TableBorder2 definition
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Applies the table format to the range "B2:E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

The macro can be implemented in Python as follows:

        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 Struct Reference in the LibreOffice API documentation to learn more about its attributes.

Verwandte Themen

Die Bibliothek ScriptForge