Contingut

# 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:

- cellAddress és una cadena que indica l'interval que s'ha de formatar en el format "A1".

- newStyle és un valor enter que correspon a l'estil de la línia de vora (veure Estils de línia a sota).

- newWidth és un valor enter que defineix el gruix de la línia.

- newColor és un valor enter corresponent a un color definit utilitzant la funció RGB.

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))

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

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

Consulteu la Referència de l'estructura TableBorder2 a la documentació de l'API del LibreOffice per a saber-ne més dels seus atributs.

Temes relacionats

La biblioteca ScriptForge

Ens cal la vostra ajuda!