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

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.

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.

Siehe auch