Randen opmaken in Calc met macro's

Door Basic of Python programmeertalen te gebruiken is het mogelijk om macro's te schrijven die opmaak toepassen op celbereiken in Calc.

Randen opmaken in celbereiken

Het onderstaande codefragment creëert een Sub genaamd FormatCellBorder die nieuwe randopmaak toepast op een bepaald bereikadres in het huidige Calc-blad.

Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
    ' Creëert de UNO-struct die de nieuwe lijnopmaak zal opslaan
    Dim lineFormat as New com.sun.star.table.BorderLine2
    lineFormat.LineStyle = newStyle
    lineFormat.LineWidth = newWidth
    If Not IsMissing(newColor) Then lineFormat.Color = newColor
    ' Haalt de doelcel op
    Dim oCell as Object
    Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
    ' Past de nieuwe indeling toe op alle randen
    oCell.TopBorder = lineFormat
    oCell.RightBorder = lineFormat
    oCell.LeftBorder = lineFormat
    oCell.BottomBorder = lineFormat
End Sub

De hierboven beschreven Sub heeft vier argumenten:

Om FormatCellBorder aan te roepen, maakt u een nieuwe macro en geeft u de gewenste argumenten door, zoals hieronder weergegeven:

Sub MyMacro
    ' Geeft toegang tot de lijnstijlconstanten
    Dim cStyle as Object
    Set cStyle = com.sun.star.table.BorderLineStyle
    ' Opmaak "B5" met effen blauwe randen
    FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
    ' Maakt alle randen in het bereik "D2:F6" op met rode gestippelde randen
    FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
End Sub

Het is mogelijk om dezelfde functionaliteit in Python te implementeren:

from uno import createUnoStruct
from scriptforge import CreateScriptService

def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
    # Definieert de nieuwe lijnopmaak
    line_format = createUnoStruct("com.sun.star.table.BorderLine2")
    line_format.LineStyle = newStyle
    line_format.LineWidth = newWidth
    line_format.Color = newColor
    # Scriptforge-service om toegang te krijgen tot celbereiken
    doc = CreateScriptService("Calc")
    cell = doc.XCellRange(cellAddress)
    cell.TopBorder = line_format
    cell.RightBorder = line_format
    cell.LeftBorder = line_format
    cell.BottomBorder = line_format

Het onderstaande codefragment implementeert een macro met de naam myMacro die formatCellBorder aanroept:

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

De hierboven weergegeven Python-code gebruikt de ScriptForge-bibliotheek die beschikbaar is sinds Collabora Office 7.2.


Lijnstijlen

Lijnstijlen worden gedefinieerd als geheeltallige constanten. In de onderstaande tabel staan de constanten voor de lijnstijlen die beschikbaar zijn in Opmaak - Cellen - Randen:

Naam Constante

Geheel getal

Naam van de Lijnstijl

SOLID

0

Vast

DOTTED

1

Gestippeld

DASHED

2

Streepjes

FINE_DASHED

14

Fijne streepjes

DOUBLE_THIN

15

Dubbeldun

DASH_DOT

16

Streep punt

DASH_DOT_DOT

17

Streep punt punt


tip

Bekijk BorderLineStyle Constant Reference in de LibreOffice API-documentatie voor meer informatie over lijnstijlconstanten.


Randen opmaken met TableBorder2

Bereikobjecten hebben een eigenschap met de naam TableBorder2 die kan worden gebruikt om bereikranden op te maken zoals wordt gedaan in het dialoogvenster Opmaak - Cellen - Randen in het gedeelte Lijnschikking.

Naast boven-, onder-, linker- en rechterranden definieert TableBorder2 ook verticale en horizontale randen. De onderstaande macro past alleen de boven- en onderranden toe op het bereik "B2:E5".

Sub TableBorder2Example
    Dim cStyle as Object
    Set cStyle = com.sun.star.table.BorderLineStyle
    ' Definieert de nieuwe lijnopmaak
    Dim lineFormat as New com.sun.star.table.BorderLine2
    lineFormat.LineStyle = cStyle.SOLID
    lineFormat.LineWidth = 15
    lineFormat.Color = RGB(0, 0, 0)
    ' Struct die de nieuwe TableBorder2-definitie opslaat
    Dim tableFormat as New com.sun.star.table.TableBorder2
    tableFormat.TopLine = lineFormat
    tableFormat.BottomLine = lineFormat
    tableFormat.IsTopLineValid = True
    tableFormat.IsBottomLineValid = True
    ' Past de tabelopmaak toe op het bereik "B2: E5"
    Dim oCell as Object
    oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
    oCell.TableBorder2 = tableFormat
End Sub

De macro kan als volgt in Python worden geïmplementeerd:

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

Bekijk TableBorder2 Struct Reference in de LibreOffice API-documentatie voor meer informatie over de kenmerken ervan.


Help ons, alstublieft!