Formattare i bordi in Calc usando le Macro

Usando il linguaggi di programmazione Basic o Python potete scrivere macro che applicano formattazioni a intervalli di celle di Calc.

Formattare i bordi degli intervalli di celle

Il frammento di codice sottostante crea una Sub chiamata FormatCellBorder che applica dei nuovi formati a un determinato intervallo di indirizzi all'interno del foglio corrente di Calc.

Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
    ' Crea la struttura UNO che conterrà il nuovo formato delle linee
    Dim lineFormat as New com.sun.star.table.BorderLine2
    lineFormat.LineStyle = newStyle
    lineFormat.LineWidth = newWidth
    If Not IsMissing(newColor) Then lineFormat.Color = newColor
    ' Ottiene la cella di destinazione
    Dim oCell as Object
    Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
    ' Applica il nuovo formato a tutti i bordi
    oCell.TopBorder = lineFormat
    oCell.RightBorder = lineFormat
    oCell.LeftBorder = lineFormat
    oCell.BottomBorder = lineFormat
End Sub

La Sub appena descritta richiede quattro argomenti:

Per richiamare FormatCellBorder create una nuova macro e passate gli argomenti desiderati, come illustrato di seguito:

Sub MyMacro
    ' Fornisce l'accesso alle costanti di stile della linea
    Dim cStyle as Object
    Set cStyle = com.sun.star.table.BorderLineStyle
    ' Formatta "B5" con bordi blu pieni
    FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
    ' Formatta tutti i bordi dell'intervallo "D2:F6" con bordi rossi a puntini
    FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
End Sub

Potete implementare la stessa funzionalità in Python:

from uno import createUnoStruct
from scriptforge import CreateScriptService

def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
    # Definisce il nuovo formato della linea
    line_format = createUnoStruct("com.sun.star.table.BorderLine2")
    line_format.LineStyle = newStyle
    line_format.LineWidth = newWidth
    line_format.Color = newColor
    # il servizio Scriptforge per accedere agli intervalli di celle
    doc = CreateScriptService("Calc")
    cell = doc.XCellRange(cellAddress)
    cell.TopBorder = line_format
    cell.RightBorder = line_format
    cell.LeftBorder = line_format
    cell.BottomBorder = line_format

Il frammento di codice seguente implementa una macro denominata myMacro che richiama 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

Il codice in Python presentato sopra usa la libreria ScriptForge che è disponibile dalla versione 7.2 di Collabora Office.


Stili delle linee

Gli stili delle linee sono definiti in forma di costanti rappresentate da numeri interi. La seguente tabella elenca le costanti degli stili di linea disponibili in Formato - Celle - Bordi:

Nome della costante

Valore intero

Nome dello stile di linea

SOLID

0

Tinta unita

DOTTED

1

Punteggiata

DASHED

2

Tratteggiata

FINE_DASHED

14

A tratti fini

DOUBLE_THIN

15

Doppia sottile

DASH_DOT

16

Tratto punto

DASH_DOT_DOT

17

Tratto punto punto


tip

Consultate la pagina BorderLineStyle Constant Reference nella documentazione delle API di LibreOffice API per saperne di più sulle costanti degli stili di linea.


Formattare i bordi usando TableBorder2

Gli oggetti Range possiedono una proprietà denominata TableBorder2 che potete usare per formattare i bordi degli intervalli di celle come avviene nella finestra di dialogo Formato - Celle - Bordi, area Cornice.

Oltre ai margini superiore, inferiore, sinistro e destro, TableBorder2 definisce anche i bordi verticali e orizzontali. La macro sottostante applica solamente i margini superiore ed inferiore all'intervallo di celle "B2:E5".

Sub TableBorder2Example
    Dim cStyle as Object
    Set cStyle = com.sun.star.table.BorderLineStyle
    ' Definisce il nuovo formato della linea
    Dim lineFormat as New com.sun.star.table.BorderLine2
    lineFormat.LineStyle = cStyle.SOLID
    lineFormat.LineWidth = 15
    lineFormat.Color = RGB(0, 0, 0)
    ' Struttura che memorizza la nuova definizione di TableBorder2
    Dim tableFormat as New com.sun.star.table.TableBorder2
    tableFormat.TopLine = lineFormat
    tableFormat.BottomLine = lineFormat
    tableFormat.IsTopLineValid = True
    tableFormat.IsBottomLineValid = True
    ' Applica il formato della tabella all'intervallo "B2:E5"
    Dim oCell as Object
    oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
    oCell.TableBorder2 = tableFormat
End Sub

Potete implementare la macro in Python come segue:

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

Consultate la pagina TableBorder2 Struct Reference nella documentazione della API di LibreOffice API per saperne di più sui sui attributi.


Sosteneteci!