Formatació de vores al Calc amb macros

Mitjançant l'ús dels llenguatges de programació BASIC o Python, és possible escriure macros que apliquen formats a intervals de cel·les al Calc.

Formatació de vores en intervals de cel·les

El fragment de codi següent crea una Sub anomenada FormatCellBorder que aplica nous formats a les vores d'un determinat rang d'adreces al full de Calc actual.


    Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
        ' Crea l'estructura UNO que emmagatzemarà el nou format de línia
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = newStyle
        lineFormat.LineWidth = newWidth
        If Not IsMissing(newColor) Then lineFormat.Color = newColor
        ' Obté la cel·la objectiu
        Dim oCell as Object
        Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
        ' Aplica el nou format a totes les vores
        oCell.TopBorder = lineFormat
        oCell.RightBorder = lineFormat
        oCell.LeftBorder = lineFormat
        oCell.BottomBorder = lineFormat
    End Sub
  

La Sub descrita anteriorment pren quatre arguments:

Per cridar a FormatCellBorder creeu una nova macro i passeu els arguments desitjats, tal com es mostra a continuació:


    Sub MyMacro
        ' Dona accés a les constants d'estil de línia
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Formata «B5» amb vores blaves sòlides
        FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
        ' Formata totes les vores de l'interval «D2:F6» amb vores puntejades vermelles
        FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
    End Sub
  

És possible implementar la mateixa funcionalitat en Python:


    from uno import createUnoStruct
    from scriptforge import CreateScriptService
    
    def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
        # Defineix el nou format de línia
        line_format = createUnoStruct("com.sun.star.table.BorderLine2")
        line_format.LineStyle = newStyle
        line_format.LineWidth = newWidth
        line_format.Color = newColor
        # Servei de l'ScriptForge per a accedir als intervals de cel·les
        doc = CreateScriptService("Calc")
        cell = doc.XCellRange(cellAddress)
        cell.TopBorder = line_format
        cell.RightBorder = line_format
        cell.LeftBorder = line_format
        cell.BottomBorder = line_format
  

El fragment de codi següent implementa una macro anomenada myMacro que crida 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

El codi Python presentat anteriorment utilitza la biblioteca ScriptForge que està disponible des del LibreOffice 7.2.


Estils de línia

Els estils de línia es defineixen com a constants enteres. La taula següent enumera les constants dels estils de línia disponibles a Format ▸ Cel·les ▸ Vores:

Nom de la constant

Valor enter

Nom de l'estil de línia

SOLID

0

Sòlid

DOTTED

1

Puntejat

DASHED

2

Ratllat

FINE_DASHED

14

Ratllat fi

DOUBLE_THIN

15

Doble fi

DASH_DOT

16

Ratlla punt

DASH_DOT_DOT

17

Ratlla punt punt


tip

Consulteu Referència a la constant BorderLineStyle a la documentació de l'API de LibreOffice per aprendre més sobre les constants d'estil de línia.


Formatació de vores mitjançant TableBorder2

Els objectes Range tenen la propietat TableBorder2 que es pot utilitzar per formatar les vores de l'interval tal com es fa al diàleg Format ▸ Cel·les ▸ Vores a la secció Arranjament de línies.

A més de les vores superior, inferior, esquerra i dreta, TableBorder2 també defineix les vores horitzontals i verticals. La macro a continuació aplica només les vores superior i inferior a l'interval «B2:E5».


    Sub TableBorder2Example
        Dim cStyle as Object
        Set cStyle = com.sun.star.table.BorderLineStyle
        ' Defineix el nou format de línia
        Dim lineFormat as New com.sun.star.table.BorderLine2
        lineFormat.LineStyle = cStyle.SOLID
        lineFormat.LineWidth = 15
        lineFormat.Color = RGB(0, 0, 0)
        ' Estructura que emmagatzema la definició del nou «TableBorder2»
        Dim tableFormat as New com.sun.star.table.TableBorder2
        tableFormat.TopLine = lineFormat
        tableFormat.BottomLine = lineFormat
        tableFormat.IsTopLineValid = True
        tableFormat.IsBottomLineValid = True
        ' Aplica la formatació de taula a l'interval «B2:E5»
        Dim oCell as Object
        oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
        oCell.TableBorder2 = tableFormat
    End Sub
  

La macro es pot implementar en Python d'aquesta manera:


    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

Consultar la següent url TableBorder2 Struct Reference a la documentació de l'API de LibreOffice per saber més sobre els seus atributs.


Ens cal la vostra ajuda!