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 Collabora Office 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!