Spis treści

# Formatowanie krawędzi w programie Calc za pomocą makr

Korzystając z języków programowania Basic lub Python, możliwe jest pisanie makr, które stosują formaty do zakresów komórek w programie Calc.

## Formatowanie krawędzi w zakresach komórek

Poniższy fragment kodu tworzy element Sub o nazwie FormatCellBorder, który stosuje nowe formaty krawędzi do podanego adresu zakresu w bieżącym arkuszu programu Calc.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Tworzy strukturę UNO, która będzie przechowywać nowy format linii
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Pobiera komórkę docelową
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Stosuje nowy format do wszystkich krawędzi
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Powyższa Sub przyjmuje cztery argumenty:

- cellAddress to ciąg znaków oznaczający zakres do sformatowania w formacie "A1".

- newStyle to liczba całkowita odpowiadająca stylowi linii krawędzi (patrz Style linii poniżej).

- newWidth jest wartością całkowitą określającą grubość linii.

- newColor to liczba całkowita odpowiadająca kolorowi zdefiniowanemu za pomocą funkcji RGB.

Aby wywołać FFormatCellBorder, utwórz nowe makro i przekaż mu wymagane argumenty w następujący sposób:

        Sub MyMacro
            ' Daje dostęp do stałych stylu linii
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Formatuje "B5" jednolitymi niebieskimi krawędziami
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Formatuje wszystkie krawędzie w zakresie "D2:F6" czerwonymi przerywanymi obramowaniami
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Możliwe jest zaimplementowanie tej samej funkcjonalności w Pythonie:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Określa nowy format linii
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Usługa Scriptforge umożliwiająca dostęp do zakresów komórek
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Poniższy fragment kodu implementuje makro o nazwie myMacro, które wywołuje 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))

Przedstawiony powyżej kod Pythona wykorzystuje bibliotekę ScriptForge, która jest dostępna od LibreOffice 7.2.

## Style linii

Style linii są zdefiniowane jako stałe całkowite. Poniższa tabela zawiera stałe dla stylów linii dostępnych w Format - Komórki - Krawędzie:

Nazwa stałej | Wartość całkowita | Nazwa stylu linii
--- | --- | ---
SOLID | 0 | Ciągła
DOTTED | 1 | Kropkowana
DASHED | 2 | Kreskowana
FINE_DASHED | 14 | Cienko kreskowana
DOUBLE_THIN | 15 | Podwójna cienka
DASH_DOT | 16 | Kreska-kropka
DASH_DOT_DOT | 17 | Kreska-kropka-kropka

Więcej informacji na temat stałych stylu linii można znaleźć w dokumencie BorderLineStyle Constant Reference w dokumentacji interfejsu API LibreOffice.

## Formatowanie krawędzi za pomocą TableBorder2

Obiekty zakresu mają właściwość o nazwie TableBorder2, której można użyć do formatowania krawędzi zakresu, tak jak robi się to w oknie dialogowym Format - Komórki - Krawędzie w sekcji Rozmieszczenie linii.

Oprócz górnej, dolnej, lewej i prawej krawędzi TableBorder2 definiuje również pionowe i poziome krawędzie. Poniższe makro dotyczy tylko górnej i dolnej krawędzi zakresu "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Określa nowy format linii
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Struktura przechowująca nową definicję TableBorder2
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Stosuje format tabeli do zakresu "B2:E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

Makro można zaimplementować w Pythonie w następujący sposób:

        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

Więcej informacji na temat atrybutów można znaleźć w dokumencie TableBorder2 Struct Reference w dokumentacji interfejsu API LibreOffice.

Tematy pokrewne

Biblioteka ScriptForge