สารบัญ (TOC) ในเอกสาร Word จะแสดงภาพรวมว่าเอกสารประกอบด้วยอะไรบ้าง นอกจากนี้ยังให้คุณนำทางไปยังส่วนใดส่วนหนึ่งของเอกสาร ในบทความนี้ คุณจะได้เรียนรู้วิธีการทำงานกับสารบัญในเอกสาร Word โดยทางโปรแกรม โดยเฉพาะอย่างยิ่ง บทความนี้ครอบคลุมถึงวิธีการเพิ่ม แยก อัปเดต หรือลบสารบัญในเอกสาร Word ใน C#
- C# API เพื่อเพิ่ม แก้ไข หรือลบ TOC ในเอกสาร Word
- เพิ่มสารบัญในเอกสาร Word
- แยกสารบัญออกจากเอกสาร Word
- ปรับปรุงสารบัญในเอกสาร Word
- ลบสารบัญในเอกสาร Word
- รับใบอนุญาต API ฟรี
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 ได้โดยใช้ เอกสารประกอบ ในกรณีที่คุณมีคำถามหรือข้อกังวลใดๆ โปรดติดต่อเราผ่านทาง ฟอรัม