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 Collabora Office 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!