Contenu

# Formatage de bordures dans Calc à l'aide de macros

En utilisant les langages de programmation Basic ou Python, il est possible d'écrire des macros qui appliquent des formats à des plages de cellules dans Calc.

## Formatage de bordures dans les plages de cellules

L'extrait de code ci-dessous crée un Sub appelé FormatCellBorder qui applique de nouveaux formats de bordure à une adresse de plage donnée dans la feuille Calc actuelle.

        Sub FormatCellBorder(cellAddress as String, newStyle as Byte, newWidth as Long, Optional newColor as Long)
            ' Crée la structure UNO qui stockera le nouveau format de ligne
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = newStyle
            lineFormat.LineWidth = newWidth
            If Not IsMissing(newColor) Then lineFormat.Color = newColor
            ' Obtient la cellule cible
            Dim oCell as Object
            Set oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(cellAddress)
            ' Applique le nouveau format à toutes les bordures
            oCell.TopBorder = lineFormat
            oCell.RightBorder = lineFormat
            oCell.LeftBorder = lineFormat
            oCell.BottomBorder = lineFormat
        End Sub

Le Sub décrit ci-dessus prend quatre arguments :

- cellAddress est une chaîne désignant la plage à formater au format "A1".

- newStyle est une valeur entière qui correspond au style de la ligne de bordure (voir Styles de ligne ci-dessous).

- newWidth est une valeur entière qui définit l'épaisseur de la ligne.

- newColor est une valeur entière correspondant à une couleur définie à l'aide de la fonction RGB.

Pour appeler FormatCellBorder, créez une nouvelle macro et transmettez les arguments souhaités, comme indiqué ci-dessous :

        Sub MyMacro
            ' Donne accès aux constantes de style de ligne
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Formats "B5" avec des bordures bleues unies
            FormatCellBorder("B5", cStyle.SOLID, 20, RGB(0, 0, 255))
            ' Formate toutes les bordures de la plage "D2:F6" avec des bordures en pointillés rouges
            FormatCellBorder("D2:F6", cStyle.DOTTED, 20, RGB(255, 0, 0))
        End Sub

Il est possible d'implémenter la même fonctionnalité en Python :

        from uno import createUnoStruct
        from scriptforge import CreateScriptService

        def formatCellBorder(cellAddress, newStyle, newWidth, newColor=0):
            # Définit le nouveau format de ligne
            line_format = createUnoStruct("com.sun.star.table.BorderLine2")
            line_format.LineStyle = newStyle
            line_format.LineWidth = newWidth
            line_format.Color = newColor
            # Service Scriptforge pour accéder aux plages de cellules
            doc = CreateScriptService("Calc")
            cell = doc.XCellRange(cellAddress)
            cell.TopBorder = line_format
            cell.RightBorder = line_format
            cell.LeftBorder = line_format
            cell.BottomBorder = line_format

L'extrait de code ci-dessous implémente une macro nommée myMacro qui appelle 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))

Le code Python présenté ci-dessus utilise la bibliothèque ScriptForge disponible depuis LibreOffice 7.2.

## Styles de ligne

Les styles de ligne sont définis comme des constantes entières. Le tableau ci-dessous répertorie les constantes des styles de ligne disponibles dans Format - Cellules - Bordures :

Nom de constante | Valeur entière | Nom du style de ligne
--- | --- | ---
SOLID | 0 | Plein
DOTTED | 1 | Pointillé
DASHED | 2 | Tirets
FINE_DASHED | 14 | Tirets fins
DOUBLE_THIN | 15 | Fin double
DASH_DOT | 16 | Trait point
DASH_DOT_DOT | 17 | Trait point point

Reportez-vous à la BorderLineStyle Constant Reference dans la documentation de l'API LibreOffice pour en savoir plus sur les constantes de style de ligne.

## Formatage des bordures en utilisant TableBorder2

Les objets de plage ont une propriété nommée TableBorder2 qui peut être utilisée pour formater les bordures de plage comme cela est fait dans la boîte de dialogue Format - Cellules - Bordures dans la section Disposition des lignes.

En plus des bordures supérieure, inférieure, gauche et droite, TableBorder2 définit également des bordures verticales et horizontales. La macro ci-dessous applique uniquement les bordures supérieure et inférieure à la plage "B2:E5".

        Sub TableBorder2Example
            Dim cStyle as Object
            Set cStyle = com.sun.star.table.BorderLineStyle
            ' Définit le nouveau format de ligne
            Dim lineFormat as New com.sun.star.table.BorderLine2
            lineFormat.LineStyle = cStyle.SOLID
            lineFormat.LineWidth = 15
            lineFormat.Color = RGB(0, 0, 0)
            ' Structure qui stocke la nouvelle définition TableBorder2
            Dim tableFormat as New com.sun.star.table.TableBorder2
            tableFormat.TopLine = lineFormat
            tableFormat.BottomLine = lineFormat
            tableFormat.IsTopLineValid = True
            tableFormat.IsBottomLineValid = True
            ' Applique le format du tableau à la plage "B2:E5"
            Dim oCell as Object
            oCell = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B2:E5")
            oCell.TableBorder2 = tableFormat
        End Sub

La macro peut être implémentée en Python comme suit :

        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

Reportez-vous à la TableBorder2 Struct Reference dans la documentation API LibreOffice pour en savoir plus sur ses attributs.

Rubriques connexes

La bibliothèque ScriptForge