Formátování ohraničení v Calcu pomocí maker

V programovacích jazycích Basic nebo Python lze psát makra, která použijí na oblast buněk v Calcu určité formátování.

Formátování ohraničení oblastí buněk

Následující část kódu vytvoří podprogram (Sub) pojmenovaný FormatCellBorder, který podle zadané adresy použije na oblast buněk v aktuálním listu Calcu nový formát ohraničení.


    Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
        ' Vytvoří strukturu UNO, do níž se uloží nový formát čáry
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = newStyle
        lineFormat.LineWidth = newWidth
        If Not IsMissing(newColor) Then lineFormat.Color = newColor
        ' Zjistí cílovou buňku
        Dim oCell as Object
        Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
        ' Použije na všechna ohraničení nový formát
        oCell.TopBorder = lineFormat
        oCell.RightBorder = lineFormat
        oCell.LeftBorder = lineFormat
        oCell.BottomBorder = lineFormat
    End Sub
  

Výše uvedený Sub přijímá čtyři argumenty:

Chcete-li podprogram FormatCellBorder zavolat, vytvořte nové makro a předejte mu požadované argumenty následovně:


    Sub MyMacro
        ' Umožňuje přistupovat ke konstantám pro styly čar
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Naformátuje ohraničení u "B5" na plné modré
        FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
        ' Naformátuje všechna ohraničení v oblasti "D2:F6" na červená tečkovaná
        FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
    End Sub
  

Stejnou funkcionalitu je možné implementovat v Pythonu:


    from uno import createUnoStruct
    from scriptforge import CreateScriptService
    
    def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
        # Definuje nový formát čáry
        line_format = createUnoStruct("com.sun.star.table.BorderLine2")
        line_format.LineStyle = newStyle
        line_format.LineWidth = newWidth
        line_format.Color = newColor
        # Služba ScriptForge pro přístup k oblastem buněk
        doc = CreateScriptService("Calc")
        cell = doc.XCellRange(cellAddress)
        cell.TopBorder = line_format
        cell.RightBorder = line_format
        cell.LeftBorder = line_format
        cell.BottomBorder = line_format
  

V následujícím úryvku kódu je implementováno makro pojmenované myMacro, které funkci formatCellBorder volá:


    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

Výše uvedený kód Pythonu používá knihovnu ScriptForge, která je k dispozici od verze LibreOffice 7.2.


Styly čar

Styly čar jsou definovány jako celočíselné konstanty. Následující tabulka uvádí seznam konstant pro styly čar, které jsou k dispozici v Formát - Buňky - Ohraničení:

Název konstanty

Celočíselná hodnota

Název stylu čáry

SOLID

0

Plná

DOTTED

1

Tečkovaná

DASHED

2

Čárkovaná

FINE_DASHED

14

Jemně čárkovaná

DOUBLE_THIN

15

Dvojitá tenká

DASH_DOT

16

Čerchovaná

DASH_DOT_DOT

17

Čerchovaná s dvěma tečkami


tip

Další informace o konstantách pro styly čar naleznete v dokumentaci API pro LibreOffice v části BorderLineStyle Constant Reference.


Formátování ohraničení pomocí vlastnosti TableBorder2

Objekty s oblastí mají vlastnost TableBorder2, kterou lze použít pro stejné formátování ohraničení, jaké se nastavuje v dialogovém okně Formát - Buňky - Ohraničení v části Uspořádání čar.

Kromě ohraničení nahoře, dole, vlevo a vpravo určuje TableBorder2 také svislé a vodorovné ohraničení. Následující makro nastavuje pro oblast "B2:E5" pouze ohraničení nahoře a dole:


    Sub TableBorder2Example
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Definuje nový formát čáry
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = cStyle.SOLID
        lineFormat.LineWidth = 15
        lineFormat.Color = RGB(0, 0, 0)
        ' Struktura pro uložení nové definice TableBorder2
        Dim tableFormat as New com.sun.star.table.TableBorder2
        tableFormat.TopLine = lineFormat
        tableFormat.BottomLine = lineFormat
        tableFormat.IsTopLineValid = True
        tableFormat.IsBottomLineValid = True
        ' Použije formát tabulky na oblast "B2:E5"
        Dim oCell as Object
        oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
        oCell.TableBorder2 = tableFormat
    End Sub
  

Toto makro je možné implementovat v Pythonu následovně:


    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

Další informace o atributech této struktury naleznete v dokumentaci API pro LibreOffice v části TableBorder2 Struct Reference.


Podpořte nás!