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 LibreOffice.


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!