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:

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

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


tip

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
  
tip

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


Podprite nas!