Vsebina

# Oblikovanje obrob v modulu Calc z makri

Z uporabo programskih jezikov Basic in Python lahko napišemo makre, ki obsegom celic v modulu Calc določijo oblikovanje.

## Oblikovanje obrob v obsegih celic

Spodnji odlomek kode ustvari podprogram Sub imenovano FormatCellBorder, ki uveljavi novo obliko obrob obsegu celic z danim naslovom na trenutno dejavnem delovnem listu v modulu Calc.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Ustvari strukturo UNO, ki bo hranila novo obliko črt
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Pridobi ciljno celico
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Uveljavi novo oblikovanje na vseh obrobah
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Zgoraj opisani Sub kličemo s štirimi argumenti:

- cellAddress je niz, ki označuje obseg, ki bo oblikovan v obliki »A1«.

- newStyle je celoštevilska vrednost, ki ustreza slogu črte obrobe (glejte Slogi črt spodaj).

- newWidth je celoštevilska vrednosti, ki določa debelino črte.

- newColor je celoštevilska vrednost, ki ustreza barvi, določeni s funkcijo RGB.

Za klic FormatCellBorder ustvarite nov makro in podajte želene argumente, kot je prikazano spodaj:

        Sub MyMacro
            ' Omogoča dostop do konstant sloga črt
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Oblikuje "B5" s polno modro obrobo
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Oblikuje vse obrobe obsega "D2:F6" kot rdečo pikasto obrobo
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Isto funkcionalnost lahko implementiramo s Pythonom:

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Določa novo obliko črt
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Storitev Scriptforge za dostop do obsegov celic
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

Spodnji odlomek kode implementira makro, poimenovan myMacro, ki kliče 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))

Zgoraj prikazana koda Python uporablja knjižnico ScriptForge, ki je na voljo od LibreOffice 7.2 naprej.

## Slogi črt

Slogi črt so definirani kot celoštevilske konstante. Spodnja tabela prikazuje konstante slogov črt, ki so na voljo v Oblika – Celice – Obrobe:

Ime konstante | Celoštevilska vrednost | Ime sloga črte
--- | --- | ---
SOLID | 0 | Polno
DOTTED | 1 | Pikasto
DASHED | 2 | Črtkano
FINE_DASHED | 14 | Fino črtkano
DOUBLE_THIN | 15 | Dvojna tanka
DASH_DOT | 16 | Črta, pika
DASH_DOT_DOT | 17 | Črta, pika, pika

Glejte razlago konstant BorderLineStyle (v angl.) v dokumentaciji API-ja LibreOffice, da izveste več o konstantah sloga črt.

## Oblikovanje obrob s TableBorder2

Predmeti obsega imajo lastnost TableBorder2, ki jo lahko uporabimo za oblikovanje obrob obsega, kot je to v pogovornem oknu Oblika – Celice – Obrobe v razdelku Razporeditev črt.

Poleg zgornje, spodnje, leve in desne obrobe definira TableBorder2 tudi navpične in vodoravne obrobe. Spodnji makro uveljavi le zgornje in spodnje obrobe v obsegu »B2:E5«.

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Določa novo obliko črt
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Struktura, ki hrani novo definicijo TableBorder2
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Uveljavi obliko tabele na obsegu celic "B2:E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

Makro lahko implementiramo v Pythonu na sledeč način:

        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

Glejte razlago strukture TableBorder2 (v angl.) v dokumentaciji API-ja LibreOffice, da izveste več o njenih atributih.

Podobne teme

Knjižnica ScriptForge