วิธีทำงานกับดัชนีและตาราง Word ใน .NET
วิธีทำงานกับดัชนีและตารางของ Word ใน .NET
คู่มือนี้แสดงวิธีการแทรกและสร้างโครงสร้างอ้างอิงที่ขับเคลื่อนด้วยฟิลด์ซึ่งเอกสาร Word ใช้สรุปเนื้อหาของตนเอง — เช่น สารบัญ ดัชนีอักษรลำดับ และตารางผู้เชี่ยวชาญ — ด้วย Aspose.Words FOSS สำหรับ .NET. แต่ละรายการถูกคอมไพล์จากฟิลด์มาร์กเกอร์ในส่วนอื่นของเอกสาร: FieldToc คอมไพล์รายการที่อิงหัวเรื่องและที่ทำเครื่องหมายด้วย FieldTC, FieldIndex คอมไพล์มาร์กเกอร์ FieldXE, และ FieldToa คอมไพล์การอ้างอิง FieldTA. ทุกคลาสฟิลด์ในตระกูลนี้สืบทอดมาจากประเภทพื้นฐาน Field ในเนมสเปซ Aspose.Words.Fields.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: แทรกสารบัญ
เรียก DocumentBuilder.InsertTableOfContents(switches) ที่ตำแหน่งที่ต้องการให้แสดง TOC โดยส่งสตริงสวิตช์ฟิลด์แบบ Word — ตัวอย่างเช่น "\o \"1-3\" \h \z \u" — เพื่อควบคุมระดับหัวเรื่องที่รวมและรูปแบบผลลัพธ์ ซึ่งเป็นสวิตช์เดียวกับที่ Word สร้างเมื่อแทรก TOC ผ่าน UI. การเรียกนี้จะใส่ FieldToc ซึ่งยังเปิดเผยโครงสร้างเดียวกันเป็นคุณสมบัติโดยตรง: HeadingLevelRange/EntryLevelRange สำหรับระดับโครงร่างที่รวม, InsertHyperlinks, PreserveTabs/PreserveLineBreaks, และ BookmarkName. หากต้องการตารางรูปภาพแทนสารบัญ ให้กำหนด TableOfFiguresLabel หรือ CaptionlessTableOfFiguresLabel บน FieldToc เดียวกัน.
ขั้นตอนที่ 2: ทำเครื่องหมายรายการสารบัญที่กำหนดเอง
ไม่ได้ทุกรายการที่ควรรวมในสารบัญ (TOC) มาจากสไตล์หัวข้อ. ใส่ FieldTC ที่ตำแหน่งเฉพาะเพื่อทำเครื่องหมายว่าเป็นรายการในสารบัญที่ไม่ขึ้นกับสไตล์ย่อหน้า: FieldTC.Text คือข้อความรายการ, EntryLevel คือระดับโครงร่างที่ควรแสดง, และ OmitPageNumber จะยกเลิกการแสดงเลขหน้า สำหรับเอกสารที่ต้องการสารบัญมากกว่าหนึ่งรายการ — เช่นสารบัญหลักและตารางรูปภาพแยกต่างหาก — ตั้งค่า FieldTC.TypeIdentifier ให้ตรงกับ EntryIdentifier ของ FieldToc ที่ควรรวบรวมมัน.
ขั้นตอนที่ 3: สร้างดัชนีจากรายการที่ทำเครื่องหมาย
ทำเครื่องหมายแต่ละตำแหน่งที่ควรอยู่ในดัชนีด้วย FieldXE, ตั้งค่า Text เป็นข้อความรายการ; EntryType จัดกลุ่มรายการเป็นระดับย่อยโดยใช้ไวยากรณ์ที่คั่นด้วยเครื่องหมายโคลอน, และ PageRangeBookmarkName ทำเครื่องหมายบุ๊กมาร์กที่ขอบเขตจะกลายเป็นช่วงหน้าในดัชนีแทนที่จะเป็นเลขหน้าตัวเดียว. FieldIndex รวบรวมเครื่องหมาย FieldXE ทั้งหมดในเอกสารเป็นผลลัพธ์ตามลำดับอักษร — ตั้งค่า Heading เพื่อแทรกตัวคั่นหัวข้ออักษร (A, B, C…), LetterRange เพื่อจำกัดดัชนีให้เฉพาะส่วนของอักษร, และ RunSubentriesOnSameLine เพื่อควบคุมการจัดรูปแบบรายการย่อย. PageNumberSeparator, PageRangeSeparator, SequenceSeparator, และ CrossReferenceSeparator ควบคุมเครื่องหมายวรรคตอนระหว่างรายการกับการอ้างอิงหน้า. สไตล์ภาพดัชนีในตัวของ Word มีให้ใช้เป็น enum FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
ขั้นตอนที่ 4: สร้างตารางผู้อ้างอิงจากการอ้างอิง
ทำเครื่องหมายการอ้างอิงแต่ละรายการในข้อความด้วย FieldTA: LongCitation และ ShortCitation เก็บข้อความการอ้างอิง, EntryCategory จัดกลุ่มภายใต้หัวข้อเช่น “Cases” หรือ “Statutes”, และ IsBold/IsItalic ควบคุมรูปแบบของมัน. FieldToa รวบรวมการอ้างอิงเหล่านั้นเป็นตาราง — EntryCategory เลือกหมวดหมู่ที่จะรวบรวม, UseHeading ควบคุมว่าหัวข้อหมวดหมู่อยู่หรือไม่, UsePassim ใช้แนวปฏิบัติ “passim” สำหรับแหล่งที่อ้างอิงหลายครั้ง, และ PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting ควบคุมการจัดรูปแบบ.
ขั้นตอนที่ 5: รีเฟรชฟิลด์หลังจากเอกสารถูกเปลี่ยนแปลง
สารบัญ (TOC), ดัชนี, หรือ ตารางผู้อ้างอิงจะไม่อัปเดตอัตโนมัติเมื่อเนื้อหารอบข้างมีการเปลี่ยนแปลง. เรียก Update() บนฟิลด์เฉพาะ — เช่น FieldToc.Update() — เพื่อคำนวณผลลัพธ์ใหม่, หรือ FieldToc.UpdatePageNumbers() เมื่อต้องรีเฟรชเฉพาะส่วนเลขหน้า. หากต้องการรีเฟรชทุกฟิลด์ในเอกสารพร้อมกันแทนที่จะทำทีละฟิลด์, เรียก Document.UpdateFields(). จำไว้ว่าเลขหน้าในผลลัพธ์จากฟิลด์เหล่านี้จะประเมินเป็นค่าตัวแทนในฉบับนี้, เนื่องจากการจัดหน้าและการทำหน้าเลขไม่ได้เป็นส่วนหนึ่งของมัน.
ขั้นตอนที่ 6: รวมรายการจากเอกสารอื่น
ใส่ FieldRD เพื่อให้ TOC, ดัชนี หรือ table of authorities ดึงรายการจากไฟล์อื่นเมื่อทำการคอมไพล์ FieldRD.FileName ระบุชื่อเอกสารที่อ้างอิง และ IsPathRelative ควบคุมว่าพาธนั้นจะถูกแก้ไขเป็นสัมพันธ์กับเอกสารปัจจุบันหรือไม่ เพิ่ม FieldRD หนึ่งรายการต่อเอกสารเพิ่มเติมและอัปเดตฟิลด์การคอมไพล์หลังจากนั้นเพื่อให้ผลลัพธ์ที่รวมกันมีเนื้อหาที่อ้างอิง.
ปัญหาทั่วไปและวิธีแก้ไข
สารบัญไม่รวมหัวข้อที่คาดหวัง. สตริงสวิตช์ของ TOC (หรือ HeadingLevelRange) ไม่รวมระดับโครงร่างเหล่านั้น ปรับสวิตช์ที่ส่งไปยัง InsertTableOfContents, หรือกำหนด FieldToc.HeadingLevelRange โดยตรง.
รายการดัชนีไม่ปรากฏตามที่คาดหวัง. ตัวบ่งชี้ที่สอดคล้องกัน FieldXE หายไป, หรือ EntryType ไวยากรณ์ระดับย่อยไม่ตรงกับสิ่งที่ FieldIndex คาดหวัง. ยืนยันว่า FieldXE เครื่องหมายมีอยู่และของพวกมัน EntryType ค่าถูกจัดรูปแบบอย่างสม่ำเสมอ.
ผลลัพธ์ของฟิลด์ดูเก่าเมื่อแก้ไขเนื้อหาแล้ว. ฟิลด์ไม่ได้รับการอัปเดตหลังการแก้ไข. เรียก Update() บนฟิลด์เฉพาะ, หรือ Document.UpdateFields() เพื่อรีเฟรชทุกฟิลด์พร้อมกัน.
รายการจากเอกสารอื่นจะไม่ถูกรวมเมื่อทำการคอมไพล์. ไม่ FieldRD การอ้างอิงว่าเอกสารนั้นมีอยู่, หรือ IsPathRelative ไม่ตรงกับวิธีที่เส้นทางควรจะถูกแก้ไข. เพิ่ม a FieldRD ด้วยค่าที่ถูกต้อง FileName and IsPathRelative การตั้งค่า.
คำถามที่พบบ่อย
ฉันจะใส่สารบัญโดยโปรแกรมได้อย่างไร?
เรียกใช้ DocumentBuilder.InsertTableOfContents(switches) พร้อมสตริงสวิตช์แบบ Word เช่น "\o \"1-3\" \h \z \u" ที่ตำแหน่งที่ต้องการให้สารบัญปรากฏ.
ฉันจะทำเครื่องหมายข้อความเป็นรายการดัชนีอย่างไร?
แทรกฟิลด์ FieldXE ที่ตำแหน่งนั้นโดยตั้งค่าคุณสมบัติ Text ให้เป็นข้อความรายการ; FieldIndex จะรวบรวมเครื่องหมาย FieldXE ทั้งหมดในเอกสารเพื่อสร้างผลลัพธ์ดัชนี.
ความแตกต่างระหว่าง FieldTC กับรายการสารบัญที่อิงหัวเรื่องคืออะไร?
พฤติกรรมสารบัญเริ่มต้นของ Word จะรวบรวมรายการจากย่อหน้าที่ใช้สไตล์หัวเรื่อง. FieldTC ทำเครื่องหมายตำแหน่งใดก็ได้เป็นรายการสารบัญโดยไม่ขึ้นกับสไตล์ย่อหน้า, ซึ่ง FieldToc สามารถรวมได้โดยการจับคู่ค่าที่ EntryIdentifier/TypeIdentifier.
ฉันจะรีเฟรชสารบัญหรือดัชนีหลังจากเอกสารมีการเปลี่ยนแปลงได้อย่างไร?
เรียกใช้ Update() บนฟิลด์เฉพาะ (หรือ UpdatePageNumbers() บน FieldToc สำหรับเลขหน้าเท่านั้น), หรือ Document.UpdateFields() เพื่อรีเฟรชทุกฟิลด์ในเอกสาร.
สามารถสร้างสารบัญหรือดัชนีข้ามหลายเอกสารได้หรือไม่?
ใช่ — แทรก FieldRD ที่ชี้ไปยังแต่ละเอกสารเพิ่มเติมผ่าน FileName. ฟิลด์การคอมไพล์ (FieldToc, FieldIndex หรือ FieldToa) จะรวมรายการจากเอกสารที่อ้างอิงเมื่อมีการอัปเดต.