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
- Dodaj spis treści w dokumencie programu Word
- Wyodrębnij spis treści z dokumentu programu Word
- Zaktualizuj spis treści w dokumencie programu Word
- Usuń spis treści w dokumencie programu Word
- Uzyskaj bezpłatną licencję API
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.
- Utwórz instancję klasy Document (w przypadku wczytania istniejącego dokumentu Worda podaj w konstruktorze ścieżkę do pliku).
- Utwórz instancję klasy DocumentBuilder i zainicjuj ją utworzonym wcześniej obiektem Document.
- Wstaw spis treści za pomocą metody DocumentBuilder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u").
- Zaktualizuj pola metodą Document.UpdateFields().
- Zapisz dokument programu Word przy użyciu metody Document.Save(String).
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.