Съдържание

# Форматиране на кантове в Calc с макроси

Чрез езиците за програмиране Basic или Python е възможно да се напишат макроси, които прилагат формати върху диапазони от клетки в Calc.

## Форматиране на кантове в диапазони от клетки

Долният откъс код създава подпрограма от тип Sub с име FormatCellBorder, която прилага нови формати на кантове върху даден адрес на диапазон в текущия лист на Calc.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Създава структура на UNO, която ще съхранява новия формат на линиите
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Извлича клетката цел
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Прилага новия формат върху всички кантове
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Описаната по-горе подпрограма от тип Sub приема четири аргумента:

- cellAddress е низ, указващ диапазона за форматиране във формат "A1".

- newStyle е цяло число, което съответства на стила на линия за кантовете (вижте Стилове на линии по-долу).

- newWidth е целочислена стойност, която задава дебелината на линията.

- newColor е целочислена стойност, съответстваща на цвят, зададена с функцията RGB.

За да извикате FormatCellBorder, създайте нов макрос и предайте желаните аргументи, както е показано по-долу:

        Sub MyMacro
            ' Дава достъп до константите за стилове на линии
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Форматира "B5" с плътни сини кантове.
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Форматира всички кантове в диапазона "D2:F6" с червени пунктирани линии.
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Същата функционалност може да се реализира и с Python:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Дефинира новия формат на линия.
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Услуга на Scriptforge за достъп до диапазони от клетки
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Откъсът код по-долу реализира макрос с име myMacro, който извиква 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))

Показаният по-горе код на Python използва библиотеката ScriptForge, която е налична от LibreOffice 7.2 нататък.

## Стилове за линии

Стиловете за линии са дефинирани като целочислени константи. В долната таблица са изброени константите за стилове на линия, налични във Форматиране - Клетки - Кантове:

Име на константа | Целочислена стойност | Име на стил за линии
--- | --- | ---
SOLID | 0 | Непрекъсната
DOTTED | 1 | Пунктирана
DASHED | 2 | Прекъсната
FINE_DASHED | 14 | Тънка прекъсната
DOUBLE_THIN | 15 | Двойна тънка
DASH_DOT | 16 | Тире, точка
DASH_DOT_DOT | 17 | Тире, точка, точка

Вижте BorderLineStyle Constant Reference (на английски) в документацията на LibreOffice API, за да научите повече за константите за стилове на линия.

## Форматиране на кантове чрез TableBorder2

Обектите диапазони имат свойство с име TableBorder2, което може да се използва за форматиране на кантовете на диапазони, както в диалога Форматиране - Клетки - Кантове, в областта Подреждане на линиите.

Освен горни, долни, леви и десни кантове, TableBorder2 дефинира също вертикални и хоризонтални кантове. Долният макрос прилага само горен и долен кант върху диапазона "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Дефинира новия формат на линия.
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Структура, която съдържа новата дефиниция за TableBorder2
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Прилага формата за таблици върху диапазона "B2:E5".
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

Макросът може да бъде реализиран на Python, както следва:

        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

Вижте TableBorder2 Struct Reference (на английски) в документацията на LibreOffice API, за да научите повече за атрибутите на тази структура.

Теми, свързани с показаната

Библиотеката ScriptForge