Arbeiten mit Index- und Tabellenfeldern
Arbeiten mit Index- und Tabellenfeldern
Dieser Leitfaden zeigt, wie man mit der Word-„Index und Tabellen“-Feldfamilie arbeitet – den Feldern hinter einem Inhaltsverzeichnis, einem Index, einem Abbildungsverzeichnis und einem Gesetzesverzeichnis. Jeder dieser ist eine Field-Unterklasse im Aspose.Words.Fields-Namensraum: FieldToc (Inhaltsverzeichnis oder Abbildungen), FieldIndex (Index), FieldXE (Indexeintrag), FieldToa (Gesetzesverzeichnis), FieldTA (Eintrag des Gesetzesverzeichnisses bzw. Zitat), FieldTC (Inhaltsverzeichniseintrag) und FieldRD (referenziertes Dokument, zum Erstellen eines kombinierten Index oder Inhaltsverzeichnisses über mehrere Dateien hinweg).
Die Basisklasse des Feldes
Jede Feldklasse in dieser Familie erbt von Field, das Start, Separator und End (die FieldStart, FieldSeparator und FieldEnd-Knoten, die das Feld im Laufstrom begrenzen), Type (ein FieldType-Wert – FieldTOC, FieldIndex, FieldTOA, FieldTOCEntry, FieldIndexEntry, FieldTOAEntry oder FieldRefDoc für diese Familie), Result/DisplayResult (der derzeit vom Feld berechnete Text), IsLocked und IsDirty sowie die Methoden GetFieldCode(), Update(), Unlink() und Remove(). Update() berechnet das Ergebnis des Feldes neu; für ein Inhaltsverzeichnis bedeutet das, die Eintragsliste aus den Überschriften des Dokuments oder FieldTC-Markern neu aufzubauen.
Einfügen eines Inhaltsverzeichnisses
DocumentBuilder.InsertTableOfContents(switches) fügt an der aktuellen Position des Builders ein FieldToc ein, wobei eine Word-Feldschalter-Zeichenkette (zum Beispiel "\o \"1-3\" \h \z \u") verwendet wird, um zu steuern, welche Überschriftsebenen einbezogen werden und wie das Ergebnis formatiert wird – dieselben Schalter, die Word selbst schreibt, wenn Sie ein TOC über die Benutzeroberfläche einfügen. Nach dem Einfügen berechnet FieldToc.UpdatePageNumbers() den Seitenzahlen-Teil der bestehenden Einträge neu. FieldToc stellt außerdem Eigenschaften bereit, die die Struktur des Inhaltsverzeichnisses direkt steuern: HeadingLevelRange und EntryLevelRange (welche Gliederungsebenen einbezogen werden), EntryIdentifier (die TC-Feld-Kennung, die das Inhaltsverzeichnis sammeln soll, um mehrere Inhaltsverzeichnisse aus verschiedenen FieldTC-Markern zu erstellen), InsertHyperlinks, PreserveTabs/PreserveLineBreaks, EntrySeparator/SequenceSeparator, BookmarkName und – für ein Abbildungsverzeichnis statt eines Inhaltsverzeichnisses – TableOfFiguresLabel und CaptionlessTableOfFiguresLabel.
Markieren benutzerdefinierter Inhaltsverzeichniseinträge
Nicht jeder TOC-Eintrag stammt aus einer Überschriftenformatvorlage. FieldTC markiert einen bestimmten Ort als Inhaltsverzeichnis-Eintrag, unabhängig vom Absatzstil: FieldTC.Text ist der Eintragstext, EntryLevel ist die Gliederungsebene, auf der er erscheinen soll, TypeIdentifier verknüpft ihn mit einem FieldToc.EntryIdentifier, wenn mehr als ein Inhaltsverzeichnis erstellt wird, und OmitPageNumber unterdrückt die Seitenzahl für diesen Eintrag.
Ein Index erstellen
FieldIndex implementiert das INDEX-Feld, das die FieldXE-Markierungen (Indexeinträge) eines Dokuments zu einem alphabetischen Index zusammenstellt. FieldXE.Text ist der Eintragstext, EntryType gruppiert Einträge in Unterebenen mittels durch Doppelpunkte getrenntem Syntax, PageRangeBookmarkName kennzeichnet ein Lesezeichen, dessen Umfang im Index zu einem Seitenbereich wird statt einer einzelnen Seitenzahl, und IsBold/IsItalic formatieren die resultierende Seitenreferenz. Auf der FieldIndex-Seite fügt Heading Buchstaben-Überschrifts-Trenner (A, B, C…) ein, LetterRange beschränkt den Index auf einen Teil des Alphabets, RunSubentriesOnSameLine steuert das Layout von Untereinträgen, und PageNumberSeparator/PageRangeSeparator/SequenceSeparator/CrossReferenceSeparator regeln die Interpunktion zwischen einem Eintrag und seiner Seitenreferenz. FieldIndexFormat listet separat die in Word integrierten visuellen Indexstile auf (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Tabelle der Autoritäten
FieldToa und FieldTA sind die Autoritäten-Entsprechungen von FieldIndex/FieldXE: FieldTA markiert ein Zitat im Text (LongCitation und ShortCitation Text, EntryCategory um es unter einer Überschrift wie „Fälle“ oder „Gesetze“ zu gruppieren, und IsBold/IsItalic zur Formatierung), und FieldToa fasst diese Zitate zu einer Tabelle zusammen, wobei EntryCategory auswählt, welche Kategorie zusammengestellt wird, UseHeading und UsePassim die Kategorienüberschriften und die „passim“-Konvention für häufig zitierte Quellen steuern, und PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting das Layout kontrollieren.
Referenzieren von Inhalten aus anderen Dokumenten
FieldRD implementiert das RD-Feld, das einem TOC-, Index- oder Autoritäten-Feld beim Zusammenstellen anweist, Einträge aus einer anderen Datei einzubeziehen — FieldRD.FileName ist das referenzierte Dokument, und IsPathRelative steuert, ob dieser Pfad relativ zum aktuellen Dokument aufgelöst wird.
Tipps und bewährte Vorgehensweisen
- Erstellen Sie die TOC-Schaltzeichenfolge auf die gleiche Weise wie Word (
\o "1-3" \h \z \u), anstatt jedeFieldToc-Eigenschaft einzeln zu konfigurieren, und passen Sie anschließend nur die spezifischen Eigenschaften an, die Sie ändern müssen. - Rufen Sie
FieldToc.UpdatePageNumbers()(oderField.Update()) nach Änderungen am Inhalt auf, damit ein Inhaltsverzeichnis, Index oder ein Verzeichnis der Autoritäten das aktuelle Dokument widerspiegelt und nicht veraltete Ergebnisse von dem Zeitpunkt, als es eingefügt wurde. - Verwenden Sie
FieldTC.TypeIdentifierzusammen mitFieldToc.EntryIdentifier, wenn ein Dokument mehr als ein Inhaltsverzeichnis benötigt (zum Beispiel ein Haupt-Inhaltsverzeichnis und ein separates Abbildungsverzeichnis), die aus unterschiedlichen Eintragssätzen erstellt werden. - Setzen Sie
FieldXE.PageRangeBookmarkName(oder die äquivalente Bereichsmarkierung vonFieldTA), anstatt einen Seitenbereich im Eintragstext manuell zu formatieren, damit der Index/das Verzeichnis konsistent bleibt, wenn sich der Inhalt verschiebt. - Denken Sie daran, dass Seitenzahlen in den INDEX/TOC/TOA-Ergebnissen dieser Ausgabe zu Platzhalterwerten ausgewertet werden und nicht zu echten Seitenzahlen, da Seitenlayout und Seitennummerierung nicht Teil dieser Ausgabe sind.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Ein Inhaltsverzeichnis enthält nicht die erwarteten Überschriften | Der Schalter-String des Inhaltsverzeichnisses (oder HeadingLevelRange) schließt diese Gliederungsebenen aus | Passen Sie die an InsertTableOfContents übergebenen Schalter an oder setzen Sie FieldToc.HeadingLevelRange |
| Ein Indexeintrag erscheint nicht an der erwarteten Stelle | Der entsprechende FieldXE-Marker fehlt, oder seine EntryType-Unterebenen-Syntax stimmt nicht mit dem überein, was FieldIndex erwartet | Bestätigen Sie, dass die FieldXE-Markierungen existieren und ihre EntryType-Werte einheitlich formatiert sind |
| Feldresultate sehen nach dem Bearbeiten des Inhalts veraltet aus | Das Feld wurde nach der Bearbeitung nicht aktualisiert | Rufen Sie Update() für das Feld auf (oder UpdateFields() auf dem Document) |
| Einträge aus einem anderen Dokument werden beim Kompilieren nicht einbezogen | Es gibt kein FieldRD, das auf dieses Dokument verweist, oder IsPathRelative stimmt nicht mit der erwarteten Pfadauflösung überein | Fügen Sie ein FieldRD mit der richtigen FileName- und IsPathRelative-Einstellung hinzu |
FAQ
Wie füge ich ein Inhaltsverzeichnis programmgesteuert ein?
Rufen Sie DocumentBuilder.InsertTableOfContents(switches) mit einer Word-artigen Schalterzeichenfolge auf, z.B. "\o \"1-3\" \h \z \u", an der Position, an der das TOC erscheinen soll.
Wie markiere ich Text als Indexeintrag?
Fügen Sie an dieser Stelle ein FieldXE-Feld ein (zum Beispiel über DocumentBuilder.InsertField) und setzen Sie dessen Text-Eigenschaft auf den Eintragstext; FieldIndex sammelt alle FieldXE-Markierungen im Dokument zu dem Indexergebnis.
Was ist der Unterschied zwischen FieldTC und überschriftenbasierten TOC-Einträgen?
Das Standard-TOC-Verhalten von Word sammelt Einträge aus Absätzen, die Überschriften-Formate verwenden. FieldTC ermöglicht es, einen beliebigen Ort als TOC-Eintrag zu markieren, unabhängig vom Absatzformat, das FieldToc über passende EntryIdentifier/TypeIdentifier-Werte einbeziehen kann.
Wie aktualisiere ich ein TOC oder einen Index, nachdem das Dokument geändert wurde?
Rufen Sie Update() für das jeweilige Feld auf (z.B. FieldToc.Update() oder FieldToc.UpdatePageNumbers() nur für Seitenzahlen), oder Document.UpdateFields(), um jedes Feld im Dokument zu aktualisieren.
Kann ich ein TOC oder einen Index über mehrere Dokumente hinweg zusammenstellen?
Ja — fügen Sie ein FieldRD-Feld ein, das über FileName auf jedes zusätzliche Dokument verweist; das zusammenstellende Feld (FieldToc, FieldIndex oder FieldToa) enthält Einträge aus referenzierten Dokumenten, wenn es aktualisiert wird.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
Field | Basisklasse für alle Feldtypen, einschließlich Start/Separator/End, Type, Update() |
DocumentBuilder.InsertTableOfContents(switches) | Ein FieldToc mit Word-ähnlichen TOC-Schaltern einfügen |
FieldToc | Implementiert das TOC-Feld (Inhaltsverzeichnis oder Abbildungsverzeichnis) |
FieldTC | Markiert einen benutzerdefinierten Inhaltsverzeichnis-Eintrag an einer bestimmten Position |
FieldIndex | Implementiert das INDEX-Feld und kompiliert FieldXE-Marker |
FieldXE | Markiert einen Ort als Indexeintrag |
FieldToa | Implementiert das table-of-authorities-Feld und kompiliert FieldTA-Marker |
FieldTA | Markiert eine Zitierung für ein Tabelle der Autoritäten |
FieldRD | Verweist auf den Inhalt eines anderen Dokuments beim Zusammenstellen eines Inhaltsverzeichnisses, Index oder Verzeichnisses der Autoritäten |
FieldIndexFormat | Aufzählung der in Word integrierten visuellen Index-Designs |