Obsah

# 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:

- cellAddress je řetězec označující oblast, která se má formátovat, zapsaný ve formátu "A1".

- newStyle je celočíselná hodnota odpovídající stylu čáry ohraničení (viz dále část Styly čar).

- newWidth je celočíselná hodnota určující tloušťku čáry.

- newColor je celočíselná hodnota odpovídající barvě definované pomocí funkce RGB.

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

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

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

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

Související témata

Knihovna ScriptForge