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 :

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

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


tip

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
  
tip

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


Aidez-nous !