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:

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

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


tip

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
  
tip

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


Prosimy o wsparcie!