แทนที่ฟิลด์ด้วยข้อความแบบคงที่
การแทนที่ฟิลด์มักจำเป็นต้องใช้เมื่อคุณต้องการบันทึกเอกสารของคุณเป็นสำเนาแบบคงที่ ตัวอย่างเช่นเมื่อส่งเป็นสิ่งที่แนบในอีเมล การแปลงฟิลด์เช่นDATE
หรือTIME
เป็นข้อความแบบคงที่จะอนุญาตให้เอกสารแสดงวันเดียวกันกับเมื่อ นอกจากนี้ในบางสถานการณ์คุณอาจต้องลบเขตข้อมูลที่มีเงื่อนไขIF
ออกจากเอกสารของคุณและแทนที่ด้วยผลลัพธ์ข้อความล่าสุดแทน ตัวอย่างเช่นการแปลงผลลัพธ์ของฟิลด์IF
เป็นข้อความแบบคงที่ดังนั้นจะไม่เปลี่ยนค่าของฟิลด์.
แผนภาพด้านล่างแสดงให้เห็นว่าฟิลด์IF
ถูกเก็บไว้ในเอกสาร:
- ข้อความถูกล้อมรอบด้วยโหนดฟิลด์พิเศษ-FieldStartและFieldEnd
- โหนดFieldSeparatorจะแยกข้อความภายในฟิลด์ลงในโค้ดฟิลด์และผลลัพธ์ของฟิลด์
- รหัสฟิลด์จะกำหนดลักษณะการทำงานทั่วไปของฟิลด์ในขณะที่ผลลัพธ์ของฟิลด์จะยังคงผลลัพธ์ล่าสุดเมื่อฟิลด์นี้ถูกอัปเดตโดยใช้Microsoft WordหรือAspose.Words
- ผลลัพธ์ฟิลด์คือสิ่งที่ถูกเก็บไว้ในฟิลด์และแสดงในเอกสารเมื่อดู
โครงสร้างยังสามารถมองเห็นด้านล่างในรูปแบบลำดับชั้นโดยใช้โครงการสาธิต*“DocumentExplorer”*.
ฟิลด์ที่ไม่สามารถถูกแทนที่ด้วยข้อความ
การแทนที่ฟิลด์ที่มีข้อความแบบคงที่ไม่ทำงานอย่างถูกต้องสำหรับบางเขตข้อมูลในส่วนหัวห.
ตัวอย่างเช่นการพยายามแปลงฟิลด์PAGE
ในส่วนหัวหรือส่วนท้ายเป็นข้อความแบบคงที่จะส่งผลใ นท้ายทั้งนี้เนื่องจากส่วนหัวและท้ายกระดาษถูกทำซ้ำในหลายหน้าและเมื่อพวกเขายังคงเป็.
งไรก็ตามในส่วนหัวฟิลด์PAGE
จะแปลเป็นข้อความแบบคงที่ ข้อความรันนี้จะถูกประเมินว่าเป็นหน้าสุดท้ายในส่วนซึ่งจะทำให้ฟิลด์PAGE
ในส่วนหัวแสดงหน้าสุดท้ายเหนือทุกหน้า.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทนที่ฟิลด์ด้วยผลลัพธ์ล่าสุด:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx"); | |
doc->UnlinkFields(); |
แปลงบางประเภทฟิลด์ในส่วนเอกสารที่เฉพาะเจาะจง
เนื่องจาก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-C | |
void ConvertFieldsToStaticText(System::SharedPtr<CompositeNode> compositeNode, FieldType targetFieldType) | |
{ | |
for (const auto& field : System::IterateOver(compositeNode->get_Range()->get_Fields())) | |
{ | |
if (field->get_Type() == targetFieldType) | |
{ | |
field->Unlink(); | |
} | |
} | |
} |
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแปลงฟิลด์IF
ทั้งหมดในเอกสารเป็นข้อความแบบสแตติก:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx"); | |
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
doc->get_Range() | |
->get_Fields() | |
->LINQ_Where([](SharedPtr<Field> f) { return f->get_Type() == FieldType::FieldIf; }) | |
->LINQ_ToList() | |
->ForEach(std::function<void(SharedPtr<Field> f)>([](SharedPtr<Field> f) { f->Unlink(); })); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.ConvertFieldsInDocument.docx"); |
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแปลงฟิลด์PAGE
ทั้งหมดในเนื้อหาของเอกสารเป็นข้อความแบบ:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx"); | |
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
doc->get_Range() | |
->get_Fields() | |
->LINQ_Where([](SharedPtr<Field> f) { return f->get_Type() == FieldType::FieldIf; }) | |
->LINQ_ToList() | |
->ForEach(std::function<void(SharedPtr<Field> f)>([](SharedPtr<Field> f) { f->Unlink(); })); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.ConvertFieldsInDocument.docx"); |
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแปลงฟิลด์IF
ทั้งหมดในย่อหน้าสุดท้ายเป็นข้อความแบบคงที่:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(MyDir + u"Linked fields.docx"); | |
// Pass the appropriate parameters to convert all IF fields encountered in the document (including headers and footers) to text. | |
doc->get_Range() | |
->get_Fields() | |
->LINQ_Where([](SharedPtr<Field> f) { return f->get_Type() == FieldType::FieldIf; }) | |
->LINQ_ToList() | |
->ForEach(std::function<void(SharedPtr<Field> f)>([](SharedPtr<Field> f) { f->Unlink(); })); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.ConvertFieldsInDocument.docx"); |