Table of Contents (TOC) in einem Word Dokument gibt Ihnen einen Überblick darüber, was ein Dokument enthält. Darüber hinaus können Sie zu einem bestimmten Abschnitt des Dokuments navigieren. In diesem Artikel erfahren Sie, wie Sie mithilfe von C# programmgesteuert mit einem Inhaltsverzeichnis in Word Dokumenten arbeiten. Dieser Artikel behandelt insbesondere das Hinzufügen, Extrahieren, Aktualisieren oder Entfernen eines Inhaltsverzeichnisses in Word Dokumenten.
- C# API zum Arbeiten mit dem Inhaltsverzeichnis in Word Dokumenten
- Inhaltsverzeichnis in einem Word Dokument hinzufügen
- Extrahieren Sie das Inhaltsverzeichnis aus einem Word Dokument
- Aktualisieren Sie das Inhaltsverzeichnis in einem Word Dokument
- Entfernen Sie das Inhaltsverzeichnis in einem Word Dokument
- Holen Sie sich eine kostenlose API Lizenz
C# API zum Arbeiten mit dem Inhaltsverzeichnis in Word Dokumenten
Um mit Inhaltsverzeichnissen in Word Dokumenten zu arbeiten, verwenden wir Aspose.Words for .NET. Die besagte API wurde entwickelt, um sowohl grundlegende als auch erweiterte Word Automatisierungsfunktionen innerhalb von .NET Anwendungen auszuführen. Darüber hinaus gibt es Ihnen einen guten Überblick über die Manipulation von Inhaltsverzeichnissen in Word Dokumenten. Sie können die API entweder herunterladen oder sie mit NuGet installieren.
PM> Install-Package Aspose.Words
Inhaltsverzeichnis in einem Word Dokument mit C# hinzufügen
Im Folgenden finden Sie die Schritte zum Hinzufügen eines Inhaltsverzeichnisses zu einem Word Dokument mit Aspose.Words for .NET.
- Erstellen Sie eine Instanz der Klasse Document (wenn Sie ein vorhandenes Word Dokument laden, geben Sie den Pfad der Datei im Konstruktor an).
- Erstellen Sie eine Instanz der Klasse DocumentBuilder und initialisieren Sie sie mit dem zuvor erstellten Document objekt.
- Inhaltsverzeichnis mit der methode DocumentBuilder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u") einfügen.
- Aktualisieren Sie die Felder mit der methode Document.UpdateFields().
- Speichern Sie das Word Dokument mit der methode Document.Save(String).
Das folgende Codebeispiel zeigt, wie Sie in C# einem Word Dokument ein Inhaltsverzeichnis hinzufügen.
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words/Aspose.Words-for-.NET
// Der Pfad zum Dokumentenverzeichnis.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Dokument initialisieren.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Fügen Sie am Anfang des Dokuments ein Inhaltsverzeichnis ein.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");
// Das neu eingefügte Inhaltsverzeichnis ist zunächst leer.
// Es muss ausgefüllt werden, indem die Felder im Dokument aktualisiert werden.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);
Inhaltsverzeichnis aus einem Word Dokument mit C# extrahieren
Im Folgenden sind die Schritte zum Extrahieren von Feldern aus einem Inhaltsverzeichnis in einem Word Dokument aufgeführt.
- Laden Sie das Word Dokument mit der Klasse Document.
- Durchlaufen Sie jedes Field im Dokument mithilfe der Document.Range.Fields Sammlung.
- Überprüfen Sie, ob der Feldtyp ein Hyperlink ist, indem Sie die Eigenschaft Field.Type verwenden.
- Prüfen Sie, ob das Feld unter dem Inhaltsverzeichnis erscheint.
- Rufen Sie die Informationen des Feldes ab und drucken Sie sie aus.
Das folgende Codebeispiel zeigt, wie Sie mit C# ein Inhaltsverzeichnis aus einem Word Dokument extrahieren.
// Der Pfad zum Dokumentenverzeichnis.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
string fileName = "TOC.doc";
Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);
foreach (Field field in doc.Range.Fields)
{
if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
{
FieldHyperlink hyperlink = (FieldHyperlink)field;
if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
{
Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
Console.WriteLine("------------------");
if (tocItem != null)
{
Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
// Rufen Sie den Speicherort ab, auf den dieses Inhaltsverzeichniselement zeigt
Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
Console.WriteLine(pointer.ToString(SaveFormat.Text));
}
} // End If
}// End If
}// End Foreach
Inhaltsverzeichnis in Word Dokument mit C# aktualisieren
Immer wenn Sie Inhalt an ein Word Dokument anhängen, müssen Sie das Inhaltsverzeichnis aktualisieren. Um dies programmgesteuert zu tun, müssen Sie einfach die Methode Document.UpdateFields() aufrufen, bevor Sie das Dokument speichern.
Inhaltsverzeichnis in Word Dokument mit C# entfernen
Mit Aspose.Words for .NET können Sie auch das Inhaltsverzeichnis aus einem Word Dokument entfernen. Im Folgenden sind die Schritte zum Ausführen dieses Vorgangs aufgeführt.
- Laden Sie zuerst das Word Dokument mit der Klasse Document.
- Holen und speichern Sie die FieldStart-Knoten jedes Inhaltsverzeichnisses in einem Array.
- Durchlaufen Sie die Knoten, bis Sie den Knoten vom Typ FieldEnd (Ende des Inhaltsverzeichnisses) erhalten.
- Entfernen Sie die Knoten mit der methode Node.Remove() und speichern Sie das aktualisierte Dokument.
Das folgende Codebeispiel zeigt, wie das Inhaltsverzeichnis aus einem Word Dokument in C# entfernt wird.
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
// Der Pfad zum Dokumentenverzeichnis.
string dataDir = RunExamples.GetDataDir_WorkingWithStyles();
// Öffnen Sie ein Dokument, das ein Inhaltsverzeichnis enthält.
Document doc = new Document(dataDir + "Document.TableOfContents.doc");
// Entfernen Sie das erste Inhaltsverzeichnis aus dem Dokument.
RemoveTableOfContents(doc, 0);
dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
// Speichern Sie die Ausgabe.
doc.Save(dataDir);
Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Entfernt das angegebene Inhaltsverzeichnisfeld aus dem Dokument.
///</summary>
///<param name="doc"> Das Dokument, aus dem das Feld entfernt werden soll.</param>
///<param name="index"> Der nullbasierte Index des zu entfernenden Inhaltsverzeichnisses.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
// Speichern Sie die FieldStart-Knoten von TOC-Feldern im Dokument für einen schnellen Zugriff.
ArrayList fieldStarts = new ArrayList();
// Dies ist eine Liste zum Speichern der Knoten, die innerhalb des angegebenen Inhaltsverzeichnisses gefunden werden. Sie werden entfernt
// Am Ende dieser Methode.
ArrayList nodeList = new ArrayList();
foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
{
if (start.FieldType == FieldType.FieldTOC)
{
// Fügen Sie alle FieldStarts hinzu, die vom Typ FieldTOC sind.
fieldStarts.Add(start);
}
}
// Stellen Sie sicher, dass das vom übergebenen Index angegebene Inhaltsverzeichnis vorhanden ist.
if (index > fieldStarts.Count - 1)
throw new ArgumentOutOfRangeException("TOC index is out of range");
bool isRemoving = true;
// Holen Sie sich den FieldStart des angegebenen Inhaltsverzeichnisses.
Node currentNode = (Node)fieldStarts[index];
while (isRemoving)
{
// Es ist sicherer, diese Knoten zu speichern und später alle auf einmal zu löschen.
nodeList.Add(currentNode);
currentNode = currentNode.NextPreOrder(doc);
// Sobald wir auf einen FieldEnd-Knoten vom Typ FieldTOC stoßen, wissen wir, dass wir am Ende sind
// Von der aktuellen TOC und wir können hier aufhören.
if (currentNode.NodeType == NodeType.FieldEnd)
{
FieldEnd fieldEnd = (FieldEnd)currentNode;
if (fieldEnd.FieldType == FieldType.FieldTOC)
isRemoving = false;
}
}
// Entfernt alle im angegebenen Inhaltsverzeichnis gefundenen Knoten.
foreach (Node node in nodeList)
{
node.Remove();
}
}
Holen Sie sich eine kostenlose API Lizenz
Falls Sie die API ohne Evaluierungseinschränkungen ausprobieren möchten, können Sie eine kostenlose temporäre Lizenz erhalten.
Fazit
In diesem Artikel haben Sie gelernt, wie Sie mit einem Inhaltsverzeichnis in einem Word Dokument mit C# arbeiten. Die Schritt-für-Schritt-Anleitung und Codebeispiele haben gezeigt, wie Sie das Inhaltsverzeichnis aus Word Dokumenten hinzufügen, aktualisieren, extrahieren und entfernen. Weitere Informationen zur C# Word Automatisierungs-API finden Sie in der Dokumentation. Falls Sie Fragen oder Bedenken haben, kontaktieren Sie uns bitte über unser Forum.