Bonjour,

Voulant créer par macro une nouvelle entrée d'index alphabétique, je décris ici mon cheminement de recherche jusqu'au malencontreux blocage.

On peut atteindre la liste des entrées à partir de l'index lui-même, par :

    ListIndexes.getByIndex(NumIndex).DocumentIndexMarks
(où  NumIndex est le numéro de l'index auquel on s'intéresse dans la liste des indexs du document, le repérage se fait par le test du nom).
DocumentIndexMarks est un tableau dont on peut voir tous les éléments dans Xray. On peut aussi accéder à ces éléments par macro
(avec un petit souci en passant : je ne sais pas lire le nombre d'éléments du tableau. Ni DocumentIndexMarks.count ni DocumentIndexMarks.GetCount ne marche).
Selon le STK, XDocumentIndexMark dérive de XtextContent qui dérive lui-même de Xcomponent, et là il y a une méthode dispose() destinée à supprimer un élément. Exemple (suppression de la première entrée de l'index) :
ListIndexes.getByIndex(NumIndex).DocumentIndexMarks(1).dispose()
Ca marche, ce qui semble montrer que DocumentIndexMarks est un accès direct à la liste des entrées d'indexs (et pas une reconstitution calculée à la dernière mise à jour de l'index, ce qui était a priori plus plausible).

Mais ça se gâte pour ajouter l'entrée. N'est-ce par la méthode queryInterface du niveau Xinterface qui devait le faire ?
Dim TheNewIndexEntry as object
TheNewIndexEntry=ListIndexes.getByIndex(NumIndex).queryInterface("com.sun.star.text.XDocumentIndexMark")
Or il me répond au plantage que l'interface demandée est « void ».

Si c'est bien cette méthode qu'il faut utiliser, sans doute me suis-je trompé dans la syntaxe ?

Merci pour toute aide,

Serge

Répondre à