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 Collabora Office 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 !