Comment travailler avec les index et les tables Word dans .NET
Comment travailler avec les index et les tables Word dans .NET
Ce guide montre comment insérer et créer les structures de référence basées sur des champs que les documents Word utilisent pour résumer leur propre contenu — une table des matières, un index alphabétique et une table des autorités — avec Aspose.Words FOSS pour .NET. Chacune est compilée à partir de champs marqueurs ailleurs dans le document : FieldToc compile les entrées basées sur les titres et marquées FieldTC, FieldIndex compile les marqueurs FieldXE, et FieldToa compile les citations FieldTA. Chaque classe de champ de cette famille dérive du type de base Field dans l’espace de noms Aspose.Words.Fields.
Guide étape par étape
Étape 1: Insérer une table des matières
Appelez DocumentBuilder.InsertTableOfContents(switches) à l’endroit où la table des matières doit apparaître, en passant une chaîne d’options de champ de style Word — par exemple "\o \"1-3\" \h \z \u" — pour contrôler les niveaux de titres inclus et la façon dont le résultat est formaté, les mêmes options que Word utilise lorsqu’une table des matières est insérée via son interface. Cela insère un FieldToc, qui expose également la même structure directement sous forme de propriétés : HeadingLevelRange/EntryLevelRange pour les niveaux de plan inclus, InsertHyperlinks, PreserveTabs/PreserveLineBreaks et BookmarkName. Pour une table des figures au lieu d’une table des matières, définissez TableOfFiguresLabel ou CaptionlessTableOfFiguresLabel sur le même FieldToc.
Étape 2: Marquer les entrées personnalisées de la table des matières
Toutes les entrées qu’une table des matières (TOC) doit inclure ne proviennent pas d’un style de titre. Insérez un FieldTC à un emplacement précis pour le marquer comme une entrée de TOC indépendante du style de paragraphe: FieldTC.Text est le texte de l’entrée, EntryLevel est le niveau hiérarchique où elle doit apparaître, et OmitPageNumber supprime le numéro de page pour cette entrée. Lorsqu’un document nécessite plus d’une TOC — par exemple une TOC principale et une table des figures distincte — réglez FieldTC.TypeIdentifier pour correspondre au EntryIdentifier du FieldToc qui doit la recueillir.
Étape 3: créer un index à partir des entrées marquées
Marquez chaque emplacement qui doit figurer dans l’index avec un FieldXE, en définissant Text sur le texte de l’entrée; EntryType regroupe les entrées en sous-niveaux à l’aide d’une syntaxe séparée par des deux-points, et PageRangeBookmarkName indique un signet dont l’étendue devient une plage de pages dans l’index plutôt qu’un numéro de page unique. FieldIndex compile chaque marqueur FieldXE du document dans le résultat alphabétique — réglez Heading pour insérer des séparateurs de titres de lettres (A, B, C…), LetterRange pour limiter l’index à une partie de l’alphabet, et RunSubentriesOnSameLine pour contrôler la mise en page des sous-entrées. PageNumberSeparator, PageRangeSeparator, SequenceSeparator et CrossReferenceSeparator contrôlent la ponctuation entre une entrée et sa référence de page. Les styles visuels d’index intégrés à Word sont disponibles sous forme d’énumération FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Étape 4: créer une table des autorités à partir des citations
Marquez chaque citation dans le texte avec un FieldTA: LongCitation et ShortCitation contiennent le texte de la citation, EntryCategory la regroupe sous un titre tel que «Cases» ou «Statutes», et IsBold/IsItalic contrôlent son formatage. FieldToa compile ces citations dans une table — EntryCategory sélectionne la catégorie à compiler, UseHeading détermine si les en-têtes de catégorie apparaissent, UsePassim applique la convention «passim» pour les sources citées de multiples fois, et PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting contrôlent la mise en page.
Étape 5: actualiser les champs après les modifications du document
Une TOC, un index ou une table des autorités ne se met pas à jour automatiquement lorsque le contenu environnant change. Appelez Update() sur le champ spécifique — par exemple FieldToc.Update() — pour recalculer son résultat, ou FieldToc.UpdatePageNumbers() lorsque seule la partie du numéro de page doit être actualisée. Pour actualiser tous les champs d’un document en une fois plutôt qu’un par un, appelez Document.UpdateFields(). Gardez à l’esprit que les numéros de page dans les résultats de ces champs sont évalués à des valeurs de substitution dans cette édition, car la mise en page et la pagination n’en font pas partie.
Étape 6: inclure des entrées provenant d’autres documents
Insérez un FieldRD pour que la TOC, l’index ou la table des autorités récupère les entrées d’un autre fichier lors de la compilation. FieldRD.FileName nomme le document référencé, et IsPathRelative contrôle si ce chemin est résolu relativement au document actuel. Ajoutez un FieldRD par document supplémentaire et mettez à jour le champ de compilation ensuite afin que le résultat combiné inclue le contenu référencé.
Problèmes courants et solutions
Une table des matières n’inclut pas les titres attendus. La chaîne d’options du TOC (ou HeadingLevelRange) exclut ces niveaux de plan. Ajustez les options passées à InsertTableOfContents, ou définissez FieldToc.HeadingLevelRange directement.
Une entrée d’index n’apparaît pas là où elle est attendue. Le FieldXE marqueur correspondant est manquant, ou son EntryType la syntaxe de sous-niveau ne correspond pas à ce que FieldIndex attend. Confirmez le FieldXE les marqueurs existent et leurs EntryType valeurs sont formatées de manière cohérente.
Les résultats du champ semblent périmés après la modification du contenu. Le champ n’a pas été mis à jour après la modification. Appelez Update() sur le champ spécifique, ou Document.UpdateFields() pour rafraîchir tous les champs d’un coup.
Les entrées d’un autre document ne sont pas incluses lors de la compilation. Non FieldRD la référence à ce document existe, ou IsPathRelative ne correspond pas à la façon dont le chemin doit être résolu. Ajoutez un FieldRD avec le bon FileName and IsPathRelative paramètre.
Foire aux questions
Comment insérer une table des matières de façon programmatique?
Appelez DocumentBuilder.InsertTableOfContents(switches) avec une chaîne d’options de style Word, telle que "\o \"1-3\" \h \z \u", à l’endroit où la table des matières doit apparaître.
Comment marquer du texte comme entrée d’index?
Insérez un champ FieldXE à cet emplacement avec sa propriété Text définie sur le texte de l’entrée; FieldIndex compile tous les marqueurs FieldXE du document dans le résultat de l’index.
Quelle est la différence entre FieldTC et une entrée de table des matières basée sur un titre?
Le comportement par défaut de la table des matières de Word collecte les entrées à partir des paragraphes utilisant les styles de titre. FieldTC marque un emplacement arbitraire comme entrée de la table des matières, indépendamment du style de paragraphe, que FieldToc peut inclure via la correspondance des valeurs EntryIdentifier/TypeIdentifier.
Comment rafraîchir une table des matières ou un index après les modifications du document?
Appelez Update() sur le champ spécifique (ou UpdatePageNumbers() sur un FieldToc uniquement pour les numéros de page), ou Document.UpdateFields() pour rafraîchir tous les champs du document.
Un TOC ou un index peut-il être compilé à travers plusieurs documents?
Oui — insérez un FieldRD pointant vers chaque document supplémentaire via FileName. Le champ de compilation (FieldToc, FieldIndex ou FieldToa) inclut les entrées des documents référencés une fois qu’il est mis à jour.