แทนที่ฟิลด์ด้วยข้อความคงที่
มักจำเป็นต้องแทนที่ฟิลด์เมื่อคุณต้องการบันทึกเอกสารของคุณเป็นสำเนาคงที่ เช่น เมื่อส่งเป็นไฟล์แนบในอีเมล การแปลงช่องต่างๆ เช่น DATE
หรือ TIME
เป็นข้อความคงที่จะทำให้เอกสารแสดงวันที่เดียวกันกับวันที่ส่งได้ นอกจากนี้ ในบางสถานการณ์ คุณอาจต้องลบเขตข้อมูล IF
แบบมีเงื่อนไขออกจากเอกสารของคุณ และแทนที่ด้วยผลลัพธ์ข้อความล่าสุดแทน ตัวอย่างเช่น การแปลงผลลัพธ์ของช่อง IF
เป็นข้อความคงที่ ดังนั้นจะไม่เปลี่ยนค่าแบบไดนามิกอีกต่อไปเมื่อมีการอัปเดตช่องในเอกสาร
แผนภาพด้านล่างแสดงวิธีจัดเก็บช่อง IF
ในเอกสาร
- ข้อความล้อมรอบด้วยโหนดฟิลด์พิเศษ – FieldStart และ FieldEnd
- โหนด FieldSeparator แยกข้อความภายในฟิลด์ออกเป็นโค้ดฟิลด์และผลลัพธ์ของฟิลด์
- รหัสฟิลด์จะกำหนดลักษณะการทำงานทั่วไปของฟิลด์ ในขณะที่ผลลัพธ์ของฟิลด์จะคงผลลัพธ์ล่าสุดไว้เมื่อมีการอัปเดตฟิลด์นี้โดยใช้ Microsoft Word หรือ Aspose.Words
- ผลลัพธ์ของฟิลด์คือสิ่งที่เก็บไว้ในฟิลด์และแสดงในเอกสารเมื่อดู
โครงสร้างยังแสดงด้านล่างในรูปแบบลำดับชั้นโดยใช้ โครงการสาธิต “DocumentExplorer”.
ช่องที่ไม่สามารถแทนที่ด้วยข้อความได้
การแทนที่ฟิลด์ด้วยข้อความคงที่จะไม่ทำงานอย่างถูกต้องสำหรับบางฟิลด์ในส่วนหัวหรือส่วนท้าย
ตัวอย่างเช่น การพยายามแปลงช่อง PAGE
ในส่วนหัวหรือส่วนท้ายเป็นข้อความคงที่จะทำให้ค่าเดียวกันนี้ปรากฏบนทุกหน้า เนื่องจากส่วนหัวและส่วนท้ายซ้ำกันในหลายหน้า และเมื่อยังคงเป็นฟิลด์ จึงมีการจัดการโดยเฉพาะเพื่อให้แสดงผลลัพธ์ที่ถูกต้องสำหรับแต่ละหน้า
อย่างไรก็ตาม ในส่วนหัว ช่อง PAGE
จะแปลเป็นการเรียกใช้ข้อความแบบคงที่ได้ดี การเรียกใช้ข้อความนี้จะได้รับการประเมินเหมือนกับว่าเป็นหน้าสุดท้ายในส่วนนี้ ซึ่งจะทำให้ช่อง PAGE
ในส่วนหัวแสดงหน้าสุดท้ายในทุกหน้า
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทนที่ฟิลด์ด้วยผลลัพธ์ล่าสุด:
ตัวอย่าง
แปลงประเภทฟิลด์บางประเภทในส่วนของเอกสารเฉพาะ
เนื่องจากวิธี ConvertFieldsToStaticText ยอมรับพารามิเตอร์สองตัว ได้แก่ คุณสมบัติ CompositeNode และการแจงนับ FieldType คุณจึงสามารถส่งผ่านโหนดคอมโพสิตไปยังวิธีนี้ได้ ซึ่งช่วยให้สามารถแปลงฟิลด์เป็นข้อความคงที่เฉพาะในส่วนของเอกสารเท่านั้น
ตัวอย่างเช่น คุณสามารถส่งวัตถุ Document และแปลงช่องประเภทที่ระบุจากทั้งเอกสารเป็นข้อความคงที่ หรือคุณสามารถส่งวัตถุ Body ของส่วนและแปลงเฉพาะช่องที่พบในเนื้อหานั้นได้
การแจงนับ FieldType ที่ส่งผ่านไปยังวิธี ConvertFieldsToStaticText ระบุประเภทของฟิลด์ที่ควรแปลงเป็นข้อความคงที่ ประเภทฟิลด์อื่นๆ ที่พบในเอกสารจะยังคงไม่เปลี่ยนแปลง
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการเลือกฟิลด์ประเภทเฉพาะ – targetFieldType ในโหนดเฉพาะ – compositeNode แล้วแปลงเป็นข้อความคงที่:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
public class FieldsHelper | |
{ | |
/// <summary> | |
/// Converts any fields of the specified type found in the descendants of the node into static text. | |
/// </summary> | |
/// <param name="compositeNode">The node in which all descendants of the specified FieldType will be converted to static text.</param> | |
/// <param name="targetFieldType">The FieldType of the field to convert to static text.</param> | |
public static void ConvertFieldsToStaticText(CompositeNode compositeNode, FieldType targetFieldType) | |
{ | |
compositeNode.Range.Fields.Cast<Field>().Where(f => f.Type == targetFieldType).ToList().ForEach(f => f.Unlink()); | |
} | |
} |
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแปลงฟิลด์ IF
ทั้งหมดในเอกสารเป็นข้อความคงที่:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
for f in doc.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_IF : | |
f.unlink() | |
# Save the document with fields transformed to disk | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.convert_fields_in_document.docx") |
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแปลงฟิลด์ PAGE
ทั้งหมดในเนื้อความของเอกสารเป็นข้อความคงที่:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert PAGE fields encountered to text only in the body of the first section. | |
for f in doc.first_section.body.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_PAGE : | |
f.unlink() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.convert_fields_in_body.docx") |
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแปลงฟิลด์ IF
ทั้งหมดในย่อหน้าสุดท้ายเป็นข้อความคงที่:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Linked fields.docx") | |
# Pass the appropriate parameters to convert all IF fields to text that are encountered only in the last | |
# paragraph of the document. | |
for f in doc.first_section.body.last_paragraph.range.fields : | |
if f.type == aw.fields.FieldType.FIELD_IF : | |
f.unlink() | |
doc.save(docs_base.artifacts_dir + "WorkingWithFields.test_file.docx") |