Macros
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
Comment accéder à un diagramme par son nom utilisateur ?
Lorsqu'on crée un graphique dans l'interface du tableur, le logiciel attribue à cet objet un nom interne (en général Object1, Object2, etc.) qu'on retrouve dans le navigateur (menu
▸ ou F5).Le menu contextuel (clic droit sur le diagramme puis Nom) permet d'attribuer un nom plus "ergonomique", correspondant davantage au contenu. Le nom donné remplace alors le nom interne dans le navigateur.
En revanche, accéder à un diagramme par programme via ce nom utilisateur n'est pas possible directement car la méthode getByName de la collection concernée (Charts) utilise uniquement le nom interne.
La solution est de passer par une étape intermédiaire. En quelque sorte, nommer le diagramme se fait dans la couche "dessin" de la feuille. On commence donc par rechercher dans cette "couche" l'objet portant le nom utilisateur (par opposition au nom "interne" donné par LibreOffice lors de la création du diagramme). Une fois qu'on a l'objet, on obtient le nom interne correspondant par lequel on peut, via la collection Charts, modifier le graphique.
Ci-dessous un exemple mettant en oeuvre cela pour modifier le titre et la plage de données du graphique nommé "barres" dans le classeur joint.
option explicit
sub LibOModifierGrapheBoucle
dim LibOClasseur as Object, LibOFeuille as Object, LibOGraph as Object, LibOPlage as Object, LibOshape as object
dim LibOData(0) as new com.sun.star.table.CellRangeAddress
dim LibONbShape as integer
LibOClasseur = thisComponent
LibOFeuille = LibOClasseur.sheets.getByName("Feuille1")
for LibONbShape = 0 to LibOFeuille.DrawPage.count - 1
LibOshape = LibOFeuille.DrawPage.getByIndex(LibONbShape)
if LibOshape.name = "barres" then
' Plage qu'on veut utiliser comme source pour le graphique
LibOPlage = LibOFeuille.getCellRangeByName("$Feuille1.$A$1:$E$4")
LibOData(0) = LibOPlage.RangeAddress
LibOGraph = LibOFeuille.Charts.getByName(LibOshape.persistName)
LibOGraph.embeddedObject.Title.String = "Graphe du " & now
LibOGraph.setranges(LibOData())
exit for
end if
next LibONbShape
end sub
- La propriété persistName renvoie le nom interne.