Spis treści (TOC) w dokumencie programu Word zapewnia przegląd zawartości dokumentu. Ponadto umożliwia przejście do określonej sekcji dokumentu. W tym artykule dowiesz się, jak programowo pracować ze spisem treści w dokumentach programu Word. W szczególności w tym artykule omówiono sposób dodawania, wyodrębniania, aktualizowania lub usuwania spisu treści w dokumentach programu Word w języku C#.

Interfejs API języka C# do dodawania, edytowania lub usuwania spisu treści w dokumentach programu Word

Do pracy ze spisami treści w dokumentach Word użyjemy Aspose.Words for .NET. Wspomniany interfejs API jest przeznaczony do wykonywania podstawowych, jak i zaawansowanych funkcji automatyzacji programu Word z poziomu aplikacji .NET. Ponadto zapewnia dobrą kontrolę nad manipulacją spisem treści w dokumentach programu Word. Możesz pobrać interfejs API lub zainstalować go za pomocą NuGet.

PM> Install-Package Aspose.Words

Dodaj spis treści w dokumencie programu Word w języku C#

Poniżej przedstawiono kroki, aby dodać spis treści do dokumentu programu Word przy użyciu Aspose.Words for .NET.

Poniższy przykładowy kod pokazuje, jak dodać spis treści w dokumencie programu Word w języku C#.

// Aby uzyskać pełne przykłady i pliki danych, przejdź do https://github.com/aspose-words/Aspose.Words-for-.NET
// Ścieżka do katalogu dokumentów.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Zainicjuj dokument.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Wstaw spis treści na początku dokumentu.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// Nowo wstawiony spis treści będzie początkowo pusty.
// Należy go wypełnić, aktualizując pola w dokumencie.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

C# Wyodrębnij spis treści z dokumentu programu Word

Poniżej przedstawiono kroki, aby wyodrębnić pola ze spisu treści w dokumencie programu Word.

  • Załaduj dokument programu Word, używając klasy Document.
  • Przejdź przez każde Pole w dokumencie, używając kolekcji Document.Range.Fields.
  • Sprawdź, czy typem pola jest hiperłącze za pomocą właściwości Field.Type.
  • Sprawdź, czy pole znajduje się pod spisem treści.
  • Pobierz informacje z pola i wydrukuj je.

Poniższy przykładowy kod pokazuje, jak wyodrębnić spis treści z dokumentu programu Word przy użyciu języka C#.

// Ścieżka do katalogu dokumentów.
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];
				// Uzyskaj lokalizację, na którą wskazuje ten element spisu treści
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

Zaktualizuj spis treści w dokumencie programu Word w języku C#

Za każdym razem, gdy dołączasz jakąś treść do dokumentu programu Word, musisz zaktualizować spis treści. Aby zrobić to programowo wystarczy wywołać metodę Document.UpdateFields() przed zapisaniem dokumentu.

Usuń spis treści w dokumencie programu Word w języku C#

Aspose.Words for .NET pozwala również usunąć spis treści z dokumentu Word. Poniżej przedstawiono kroki, aby wykonać tę operację.

  • Najpierw załaduj dokument programu Word, używając klasy Document.
  • Pobierz i zapisz węzły FieldStart każdego spisu treści w tablicy.
  • Zapętlaj węzły, aż uzyskasz węzeł typu FieldEnd (koniec spisu treści).
  • Usuń węzły metodą Node.Remove() i zapisz zaktualizowany dokument.

Poniższy przykładowy kod pokazuje, jak usunąć spis treści z dokumentu programu Word w języku C#.

// Aby uzyskać pełne przykłady i pliki danych, przejdź do https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // Ścieżka do katalogu dokumentów.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // Otwórz dokument zawierający spis treści.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // Usuń pierwszy spis treści z dokumentu.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Zapisz dane wyjściowe.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Usuwa określone pole spisu treści z dokumentu.
///</summary>
///<param name="doc"> Dokument, z którego ma zostać usunięte pole.</param>
///<param name="index"> Liczony od zera indeks spisu treści do usunięcia.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Przechowuj węzły FieldStart pól spisu treści w dokumencie, aby mieć do nich szybki dostęp.
    ArrayList fieldStarts = new ArrayList();
    // To jest lista do przechowywania węzłów znalezionych w określonym spisie treści. Zostaną usunięte
    // Na koniec tej metody.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // Dodaj wszystkie FieldStarts, które są typu FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // Upewnij się, że istnieje spis treści określony przez przekazany indeks.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Uzyskaj FieldStart określonego spisu treści.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // Bezpieczniej jest przechowywać te węzły i usuwać je wszystkie na raz później.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // Gdy napotkamy węzeł FieldEnd typu FieldTOC, wiemy, że jesteśmy na końcu
        // Aktualnego spisu treści i na tym możemy się zatrzymać.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Usuń wszystkie węzły znalezione w określonym spisie treści.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Uzyskaj bezpłatną licencję API

Jeśli chcesz wypróbować interfejs API bez ograniczeń ewaluacyjnych, możesz uzyskać bezpłatną tymczasową licencję.

Wniosek

W tym artykule nauczyłeś się, jak programowo pracować ze spisem treści w dokumencie programu Word. Przewodnik krok po kroku i przykłady kodu pokazują, jak dodawać, aktualizować, wyodrębniać i usuwać spis treści z dokumentów programu Word w języku C#. Możesz dowiedzieć się więcej o interfejsie API automatyzacji C# Word, korzystając z dokumentacji. Jeśli masz jakiekolwiek pytania lub wątpliwości, skontaktuj się z nami za pośrednictwem naszego forum.

Zobacz też