Macros

    From The Document Foundation Wiki
    < Macros‎ | Calc


    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 :