Formatering av kantlinjer i Calc med makroer

Ved å bruke Basic eller Python programmeringsspråk er det mulig å skrive makroer som bruker formater på celleområder i Calc.

Formatering av kantlinjer i Celleområder

Kodestykket nedenfor oppretter en Sub kalt FormatCellBorder som bruker nye kantformater på en gitt områdeadresse i det gjeldende Calc -arket.

Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
    'Oppretter UNO -strukturen som lagrer det nye linjeformatet
    Dim lineFormat as New com.sun.star.table.BorderLine2
    lineFormat.LineStyle = newStyle
    lineFormat.LineWidth = newWidth
    If Not IsMissing(newColor) Then lineFormat.Color = newColor
    'Får målcellen
    Dim oCell as Object
    Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
    'Bruker det nye formatet for alle kantlinjer
    oCell.TopBorder = lineFormat
    oCell.RightBorder = lineFormat
    oCell.LeftBorder = lineFormat
    oCell.BottomBorder = lineFormat
End Sub

Sub beskrevet ovenfor inneholder fire argumenter:

For å anrope FormatCellBorder , opprett en ny makro og send inn de ønskede argumentene, som vist nedenfor:

Sub MyMacro
    'Gir tilgang til linjestilkonstantene
    Dim cStyle as Object
    Set cStyle = com.sun.star.table.BorderLineStyle
    'Formater "B5" med kompakte blå kanter
    FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
    'Formaterer alle kantlinjer i området "D2: F6" med røde prikkete kanter
    FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
End Sub

Det er mulig å implementere den samme funksjonaliteten i Python:

from uno import createUnoStruct
from scriptforge import CreateScriptService

def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
    # Definerer det nye linjeformatet
    line_format = createUnoStruct("com.sun.star.table.BorderLine2")
    line_format.LineStyle = newStyle
    line_format.LineWidth = newWidth
    line_format.Color = newColor
    # Scriptforge -tjeneste for å få tilgang til celleområder
    doc = CreateScriptService("Calc")
    cell = doc.XCellRange(cellAddress)
    cell.TopBorder = line_format
    cell.RightBorder = line_format
    cell.LeftBorder = line_format
    cell.BottomBorder = line_format

Kodestykket nedenfor implementerer en makro som heter myMacro som anroper 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

Python -koden som presenteres ovenfor bruker ScriptForge bibllioteket som er tilgjengelig siden Collabora Office 7.2.


Linjestiler

Linjestiler er definert som heltallskonstanter. Tabellen nedenfor viser konstantene for linjestilene som er tilgjengelige i Format - Celler - Kantlinjer :

Konstantnavn

Heltallsverdi

Linjestilnavn

SOLID

0

Kompakt

DOTTED

1

Prikket

DASHED

2

Stiplet

FINE_DASHED

14

Finstiplet

DOUBLE_THIN

15

Dobbelt tynn

DASH_DOT

16

Bindestrekprikk

DASH_DOT_DOT

17

Bindestrek prik prikk


tip

Referer til BorderLineStyle Konstant referanse i LibreOffice API -dokumentasjonen for å lære mer om linestilkonstanter.


Formatering av kantlinjer ved hjelp av TableBorder2

Områdeobjekter har en egenskap som heter TableBorder2 som kan brukes til å formatere områdegrenselinjer slik det gjøres i Format - Celler - Kantlinjer dialogboksen i Linjearrangement seksjonen.

I tillegg til øvre, nedre, venstre og høyre kant, definerer TableBorder2 også vertikale og horisontale kantlinjer. Makroen nedenfor gjelder bare øvre og nedre kantlinje for området "B2: E5".

Sub TableBorder2Example
    Dim cStyle as Object
    Set cStyle = com.sun.star.table.BorderLineStyle
    'Definerer det nye linjeformatet
    Dim lineFormat as New com.sun.star.table.BorderLine2
    lineFormat.LineStyle = cStyle.SOLID
    lineFormat.LineWidth = 15
    lineFormat.Color = RGB(0, 0, 0)
    'Struktur som lagrer den nye TableBorder2 -definisjonen
    Dim tableFormat as New com.sun.star.table.TableBorder2
    tableFormat.TopLine = lineFormat
    tableFormat.BottomLine = lineFormat
    tableFormat.IsTopLineValid = True
    tableFormat.IsBottomLineValid = True
    'Bruker tabellformatet for området "B2: E5"
    Dim oCell as Object
    oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
    oCell.TableBorder2 = tableFormat
End Sub

Makroen kan implementeres i Python slik:

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

Refer to the TableBorder2 Strukturreferanse i LibreOffice API -dokumentasjonen for å lære mer om attributtene.


Supporter oss!