Daftar Isi (TOC) dalam dokumen Word memberi Anda ikhtisar tentang isi dokumen. Selain itu, ini memungkinkan Anda menavigasi ke bagian tertentu dari dokumen. Pada artikel ini, Anda akan mempelajari cara bekerja dengan daftar isi dalam dokumen Word secara terprogram. Secara khusus, artikel ini membahas cara menambah, mengekstrak, memperbarui, atau menghapus daftar isi dalam dokumen Word di C#.

C# API untuk Menambah, Mengedit, atau Menghapus TOC di Dokumen Word

Untuk bekerja dengan daftar isi dalam dokumen Word, kami akan menggunakan Aspose.Words for .NET. API tersebut dirancang untuk melakukan fitur otomatisasi Word dasar dan lanjutan dari dalam aplikasi .NET. Selain itu, ini memberi Anda pegangan yang kuat atas manipulasi daftar isi dalam dokumen Word. Anda dapat mengunduh API atau menginstalnya menggunakan NuGet.

PM> Install-Package Aspose.Words

Tambahkan Daftar Isi dalam Dokumen Word di C#

Berikut langkah-langkah menambahkan daftar isi ke dokumen Word menggunakan Aspose.Words for .NET.

Contoh kode berikut menunjukkan cara menambahkan daftar isi dalam dokumen Word di C#.

// Untuk contoh lengkap dan file data, silakan buka https://github.com/aspose-words/Aspose.Words-for-.NET
// Path ke direktori dokumen.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Inisialisasi dokumen.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Sisipkan daftar isi di awal dokumen.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// Daftar isi yang baru dimasukkan awalnya akan kosong.
// Itu perlu diisi dengan memperbarui bidang dalam dokumen.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

C# Ekstrak Daftar Isi dari Dokumen Word

Berikut ini adalah langkah-langkah untuk mengekstrak bidang dari daftar isi dalam dokumen Word.

  • Muat dokumen Word menggunakan kelas Document.
  • Ulangi setiap Field dalam dokumen menggunakan koleksi Document.Range.Fields.
  • Periksa apakah jenis field adalah hyperlink menggunakan properti Field.Type.
  • Periksa apakah bidang berada di bawah tabel bagian isi.
  • Ambil informasi lapangan dan cetak.

Contoh kode berikut menunjukkan cara mengekstrak daftar isi dari dokumen Word menggunakan C#.

// Path ke direktori dokumen.
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];
				// Dapatkan lokasi yang ditunjuk Item TOC ini
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

Perbarui Daftar Isi dalam Dokumen Word di C#

Setiap kali Anda menambahkan beberapa konten ke dokumen Word, Anda perlu memperbarui daftar isi. Untuk melakukannya secara terprogram, Anda hanya perlu memanggil metode Document.UpdateFields() sebelum menyimpan dokumen.

Hapus Daftar Isi di Dokumen Word di C#

Aspose.Words for .NET juga memungkinkan Anda menghapus daftar isi dari dokumen Word. Berikut ini adalah langkah-langkah untuk melakukan operasi ini.

  • Pertama, muat dokumen Word menggunakan kelas Document.
  • Dapatkan dan simpan node FieldStart dari setiap TOC dalam sebuah array.
  • Ulangi node hingga Anda mendapatkan node bertipe FieldEnd (akhir TOC).
  • Hapus node menggunakan metode Node.Remove() dan simpan dokumen yang diperbarui.

Contoh kode berikut menunjukkan cara menghapus daftar isi dari dokumen Word di C#.

// Untuk contoh lengkap dan file data, silakan buka https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // Path ke direktori dokumen.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // Buka dokumen yang berisi TOC.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // Hapus daftar isi pertama dari dokumen.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Simpan hasilnya.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Menghapus bidang daftar isi yang ditentukan dari dokumen.
///</summary>
///<param name="doc"> Dokumen untuk menghapus bidang dari.</param>
///<param name="index"> Indeks TOC berbasis nol yang akan dihapus.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Simpan node FieldStart dari bidang TOC dalam dokumen untuk akses cepat.
    ArrayList fieldStarts = new ArrayList();
    // Ini adalah daftar untuk menyimpan node yang ditemukan di dalam TOC yang ditentukan. Mereka akan dihapus
    // Pada akhir metode ini.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // Tambahkan semua FieldStarts yang bertipe FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // Pastikan TOC yang ditentukan oleh indeks yang diteruskan ada.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Dapatkan FieldStart dari TOC yang ditentukan.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // Lebih aman untuk menyimpan node ini dan menghapusnya sekaligus nanti.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // Setelah kami menemukan simpul FieldEnd bertipe FieldTOC, maka kami tahu bahwa kami berada di akhir
        // TOC saat ini dan kita bisa berhenti di sini.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Hapus semua node yang ditemukan di TOC yang ditentukan.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Dapatkan Lisensi API Gratis

Jika Anda ingin mencoba API tanpa batasan evaluasi, Anda bisa mendapatkan lisensi sementara gratis.

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara bekerja dengan daftar isi dalam dokumen Word secara terprogram. Panduan langkah demi langkah dan contoh kode telah menunjukkan cara menambah, memperbarui, mengekstrak, dan menghapus daftar isi dari dokumen Word di C#. Anda dapat mempelajari lebih lanjut tentang C# Word automation API menggunakan dokumentasi. Jika Anda memiliki pertanyaan atau masalah, silakan hubungi kami melalui forum kami.

Lihat juga