Macros

From The Document Foundation Wiki
< Macros‎ | Calc
Jump to: navigation, search

Comment gérer les bordures d'une plage de cellules ?

On souhaite gérer par programme la définition des bordures d'une plage ou une cellule.

Les bordures sont accessibles via la propriété TableBorder2[1].

Les éléments de cette structure sont de deux types :

  • Des bordures (haut, bas, gauche, droite, horizontale, verticale) ; les bordures sont des structures BorderLine2[2] qui "ajoutent" les éléments de style[3] à la structure BorderLine[4].
  • Des booléens (IsLeftLineValid, IsRightLineValid, IsTopLineValid, etc.). En écriture, les définir à True pour modifier la ligne correspondante et à False pour l'ignorer, autrement dit pour garder sa valeur actuelle.


La définition de l'espacement avec le contenu se fait via les propriétés ParaLeftMargin, ParaRightMargin, ParaTopMargin, ParaBottomMargin.


La procédure suivante met en forme la plage B2:D7 de la feuille nommée Feuille1 dans le classeur courant :

  • L'objectif est de remplacer les bordures actuelles (les paramètres Is...Valid sont définis à True) pour obtenir un encadrement extérieur et des lignes horizontales doubles. En revanche on ne veut pas de lignes verticales. Il faut en conséquence .IsVerticalLineValid = true et VerticalLine = LibONoLine, une structure définie pour appliquer une ligne "vide". On ne peut simplement utiliser .IsVerticalLineValid = false car la plage peut avoir des lignes verticales définies et on désire les supprimer. Avec le paramètre false les lignes existantes seraient laissées dans leur état actuel.
  • Les diagonales ne sont pas gérées par la structure TableBorder2 mais par les propriétés DiagonalBLTR2 et DiagonalTLBR2 (BLTR = BottomLeftTopRight soit la diagonale du bas à gauche vers le haut à droite, et vice versa pour TLBR).
  • L'espacement avec le contenu désiré est 0,30cm.
option explicit

sub LibOEncadrerPlage

dim LibOPlage as object
dim LibOTableBorder as object
dim LibOLine as new com.sun.star.table.BorderLine2
dim LibONoLine as new com.sun.star.table.BorderLine2

LibOPlage = thiscomponent.sheets.getByName("Feuille1").getCellRangeByName("B2:D7")

with LibOLine
        .Color = 0
        .InnerLineWidth = 5
        .LineDistance = 60
        .LineStyle = com.sun.star.table.BorderLineStyle.DOUBLE 
        .LineWidth = 5
        .OuterLineWidth = 5
end with
with LibONoLine
        .Color = 0
        .InnerLineWidth = 0
        .LineDistance = 0
        .LineStyle = 0
        .LineWidth = 0
        .OuterLineWidth = 0
end with

LibOTableBorder = LibOPlage.TableBorder2

with LibOTableBorder
        .IsLeftLineValid = true
        .IsRightLineValid = true
        .IsTopLineValid = true
        .IsBottomLineValid = true
        .IsHorizontalLineValid = true
        .IsVerticalLineValid = true
        .LeftLine = LibOLine
        .RightLine = LibOLine
        .TopLine = LibOLine
        .BottomLine = LibOLine 
        .HorizontalLine = LibOLine 
        .VerticalLine = LibONoLine 
end with

with LibOPlage
        .TableBorder2 = LibOTableBorder 
        .DiagonalBLTR2 = LibONoLine 
        .DiagonalTLBR2 = LibONoLine 
        .ParaLeftMargin = 30
        .ParaRightMargin = 30
        .ParaTopMargin = 30
        .ParaBottomMargin = 30
end with 

end sub


Notes :