สารบัญ (TOC) ในเอกสาร Word จะแสดงภาพรวมว่าเอกสารประกอบด้วยอะไรบ้าง นอกจากนี้ยังให้คุณนำทางไปยังส่วนใดส่วนหนึ่งของเอกสาร ในบทความนี้ คุณจะได้เรียนรู้วิธีการทำงานกับสารบัญในเอกสาร Word โดยทางโปรแกรม โดยเฉพาะอย่างยิ่ง บทความนี้ครอบคลุมถึงวิธีการเพิ่ม แยก อัปเดต หรือลบสารบัญในเอกสาร Word ใน C#

C# API เพื่อเพิ่ม แก้ไข หรือลบ TOC ในเอกสาร Word

ในการทำงานกับสารบัญในเอกสาร Word เราจะใช้ Aspose.Words for .NET API ดังกล่าวได้รับการออกแบบมาเพื่อใช้งานคุณสมบัติการทำงานอัตโนมัติของ Word ขั้นพื้นฐานและขั้นสูงจากภายในแอปพลิเคชัน .NET นอกจากนี้ยังช่วยให้คุณเข้าใจการจัดการสารบัญในเอกสาร Word ได้ดียิ่งขึ้น คุณสามารถ ดาวน์โหลด API หรือติดตั้งโดยใช้ NuGet

PM> Install-Package Aspose.Words

เพิ่มสารบัญในเอกสาร Word ใน C#

ต่อไปนี้เป็นขั้นตอนในการเพิ่มสารบัญลงในเอกสาร Word โดยใช้ Aspose.Words for .NET

  • สร้างอินสแตนซ์ของคลาส Document (ในกรณีที่โหลดเอกสาร Word ที่มีอยู่ ให้ระบุพาธของไฟล์ในตัวสร้าง)
  • สร้างอินสแตนซ์ของคลาส DocumentBuilder และเริ่มต้นด้วยวัตถุ Document ที่สร้างขึ้นก่อนหน้านี้
  • แทรกสารบัญโดยใช้เมธอด DocumentBuilder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u")
  • อัปเดตฟิลด์โดยใช้เมธอด Document.UpdateFields()
  • บันทึกเอกสาร Word โดยใช้วิธี Document.Save(String)

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มสารบัญในเอกสาร Word ใน C#

// สำหรับตัวอย่างและไฟล์ข้อมูลทั้งหมด โปรดไปที่ https://github.com/aspose-words/Aspose.Words-for-.NET
// เส้นทางไปยังไดเร็กทอรีเอกสาร
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// เริ่มต้นเอกสาร
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// แทรกสารบัญที่จุดเริ่มต้นของเอกสาร
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// สารบัญที่แทรกใหม่จะว่างเปล่าในตอนแรก
// ต้องมีการเติมข้อมูลโดยการอัปเดตฟิลด์ในเอกสาร
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

C# แยกสารบัญออกจากเอกสาร Word

ต่อไปนี้เป็นขั้นตอนในการแยกเขตข้อมูลจากสารบัญในเอกสาร Word

  • โหลดเอกสาร Word โดยใช้คลาส Document
  • วนซ้ำแต่ละ Field ในเอกสารโดยใช้คอลเลกชัน Document.Range.Fields
  • ตรวจสอบว่าประเภทฟิลด์เป็นไฮเปอร์ลิงก์โดยใช้คุณสมบัติ Field.Type
  • ตรวจสอบว่าฟิลด์อยู่ภายใต้สารบัญของส่วนเนื้อหาหรือไม่
  • ดึงข้อมูลของฟิลด์และพิมพ์

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกสารบัญจากเอกสาร Word โดยใช้ C#

// เส้นทางไปยังไดเร็กทอรีเอกสาร
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];
				// รับตำแหน่งที่รายการ TOC นี้ชี้ไป
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

อัปเดตสารบัญในเอกสาร Word ใน C

เมื่อใดก็ตามที่คุณผนวกเนื้อหาบางอย่างลงในเอกสาร Word คุณต้องอัปเดตสารบัญ ในการดำเนินการโดยทางโปรแกรม คุณเพียงต้องเรียกใช้เมธอด Document.UpdateFields() ก่อนบันทึกเอกสาร

ลบสารบัญในเอกสาร Word ใน C

Aspose.Words for .NET ยังอนุญาตให้คุณลบสารบัญออกจากเอกสาร Word ต่อไปนี้เป็นขั้นตอนในการดำเนินการนี้

  • ขั้นแรก ให้โหลดเอกสาร Word โดยใช้คลาส Document
  • รับและจัดเก็บโหนด FieldStart ของ TOC แต่ละรายการในอาร์เรย์
  • วนซ้ำโหนดจนกว่าคุณจะได้โหนดประเภท FieldEnd (สิ้นสุด TOC)
  • ลบโหนดโดยใช้เมธอด Node.Remove() และบันทึกเอกสารที่อัปเดต

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีลบสารบัญออกจากเอกสาร Word ใน C#

// สำหรับตัวอย่างและไฟล์ข้อมูลทั้งหมด โปรดไปที่ https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // เส้นทางไปยังไดเร็กทอรีเอกสาร
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // เปิดเอกสารที่มีสารบัญ
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // ลบสารบัญแรกออกจากเอกสาร
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // บันทึกผลลัพธ์
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// ลบฟิลด์สารบัญที่ระบุออกจากเอกสาร
///</summary>
///<param name="doc"> เอกสารที่จะลบฟิลด์ออก</param>
///<param name="index"> ดัชนีที่เป็นศูนย์ของ TOC ที่จะลบ</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // จัดเก็บโหนด FieldStart ของฟิลด์ TOC ในเอกสารเพื่อการเข้าถึงที่รวดเร็ว
    ArrayList fieldStarts = new ArrayList();
    // นี่คือรายการสำหรับจัดเก็บโหนดที่พบใน TOC ที่ระบุ พวกเขาจะถูกลบออก
    // ในตอนท้ายของวิธีนี้
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // เพิ่ม FieldStarts ทั้งหมดซึ่งเป็นประเภท FieldTOC
            fieldStarts.Add(start);
        }
    }

    // ตรวจสอบให้แน่ใจว่า TOC ที่ระบุโดยดัชนีที่ผ่านมีอยู่
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // รับ FieldStart ของ TOC ที่ระบุ
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // การจัดเก็บโหนดเหล่านี้และลบออกทั้งหมดในภายหลังจะปลอดภัยกว่า
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // เมื่อเราพบโหนด FieldEnd ประเภท FieldTOC เราจะรู้ว่าเราถึงจุดสิ้นสุดแล้ว
        // ของ TOC ในปัจจุบัน และเราสามารถหยุดไว้ที่นี่
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // ลบโหนดทั้งหมดที่พบใน TOC ที่ระบุ
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

รับใบอนุญาต API ฟรี

ในกรณีที่คุณต้องการลองใช้ API โดยไม่มีข้อจำกัดในการประเมิน คุณสามารถ รับใบอนุญาตชั่วคราวฟรี

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีการทำงานกับสารบัญในเอกสาร Word โดยทางโปรแกรม คำแนะนำทีละขั้นตอนและตัวอย่างโค้ดได้แสดงวิธีเพิ่ม อัปเดต แยกและลบสารบัญออกจากเอกสาร Word ใน C# คุณสามารถสำรวจเพิ่มเติมเกี่ยวกับ C# Word automation API ได้โดยใช้ เอกสารประกอบ ในกรณีที่คุณมีคำถามหรือข้อกังวลใดๆ โปรดติดต่อเราผ่านทาง ฟอรัม

ดูสิ่งนี้ด้วย