แทรกฟิลด์

มีหลายวิธีในการแทรกฟิลด์ลงในเอกสาร:

ในบทความนี้ เราจะดูรายละเอียดเพิ่มเติมแต่ละวิธีและวิเคราะห์วิธีแทรกฟิลด์บางฟิลด์โดยใช้ตัวเลือกเหล่านี้

การแทรกฟิลด์ลงในเอกสารโดยใช้ DocumentBuilder

ใน Aspose.Words วิธีการ insert_field ใช้เพื่อแทรกฟิลด์ใหม่ลงในเอกสาร พารามิเตอร์แรกยอมรับโค้ดฟิลด์แบบเต็มของฟิลด์ที่จะแทรก พารามิเตอร์ตัวที่สองเป็นทางเลือก และอนุญาตให้ตั้งค่าผลลัพธ์ของฟิลด์ด้วยตนเองได้ หากไม่ได้ระบุ ฟิลด์นี้จะได้รับการอัปเดตโดยอัตโนมัติ คุณสามารถส่งค่าว่างหรือค่าว่างให้กับพารามิเตอร์นี้เพื่อแทรกฟิลด์ที่มีค่าฟิลด์ว่างได้ หากคุณไม่แน่ใจเกี่ยวกับไวยากรณ์ของโค้ดฟิลด์ ให้สร้างฟิลด์ใน Microsoft Word ก่อน แล้วสลับเพื่อดูโค้ดของฟิลด์

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทรกเขตข้อมูลผสานลงในเอกสารโดยใช้ DocumentBuilder:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_field("MERGEFIELD MyFieldName \* MERGEFORMAT")
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_field.docx")

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทรกเขตข้อมูลผสานด้วยตำแหน่งที่ตั้งภาษาเยอรมันลงในเอกสารโดยใช้ DocumentBuilder:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
# Insert content with German locale.
builder.font.locale_id = 1031
builder.insert_field("MERGEFIELD Date1 \\@ \"dddd, d MMMM yyyy\"")
builder.write(" - ")
builder.insert_field("MERGEFIELD Date2 \\@ \"dddd, d MMMM yyyy\"")

เทคนิคเดียวกันนี้ใช้ในการแทรกฟิลด์ที่ซ้อนกันภายในฟิลด์อื่น

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทรกฟิลด์ที่ซ้อนกันภายในฟิลด์อื่นโดยใช้ DocumentBuilder:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
for i in range(0, 5) :
builder.insert_break(aw.BreakType.PAGE_BREAK)
builder.move_to_header_footer(aw.HeaderFooterType.FOOTER_PRIMARY)
# We want to insert a field like this:
# IF PAGE <> NUMPAGES "See Next Page" "Last Page"
field = builder.insert_field("IF ")
builder.move_to(field.separator)
builder.insert_field("PAGE")
builder.write(" <> ")
builder.insert_field("NUMPAGES")
builder.write(" \"See Next Page\" \"Last Page\" ")
field.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_nested_fields.docx")

ระบุสถานที่ในระดับฟิลด์

ตัวระบุภาษาเป็นตัวย่อตัวเลขมาตรฐานสากลสำหรับภาษาในประเทศหรือภูมิภาคทางภูมิศาสตร์ เมื่อใช้ Aspose.Words คุณจะระบุภาษาได้ที่ระดับช่อง คุณสมบัติ locale_id ได้รับหรือตั้งค่ารหัสสถานที่ของเขตข้อมูล

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการใช้ตัวเลือกนี้:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
builder = aw.DocumentBuilder()
field = builder.insert_field(aw.fields.FieldType.FIELD_DATE, True)
field.locale_id = 1049
builder.document.save(docs_base.artifacts_dir + "WorkingWithFields.specifylocale_at_fieldlevel.docx")

แทรกฟิลด์ที่ไม่ได้พิมพ์/ว่างเปล่า

หากคุณต้องการแทรกช่องที่ไม่ได้พิมพ์/ว่างเปล่า ({}) เช่นเดียวกับที่ Microsoft Word อนุญาต คุณสามารถใช้วิธี insert_field กับพารามิเตอร์ FieldType.FIELD_NONE ได้ หากต้องการแทรกฟิลด์ลงในเอกสาร Word คุณสามารถกดคีย์ผสม “Ctrl + F9”

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทรกฟิลด์ว่างลงในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
field = builder.insert_field(aw.fields.FieldType.FIELD_NONE, False)
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_field_none.docx")

การแทรกฟิลด์ลงในเอกสารโดยใช้ FieldBuilder

อีกวิธีหนึ่งในการแทรกฟิลด์ใน Aspose.Words คือคลาส FieldBuilder มีอินเทอร์เฟซที่คล่องแคล่วเพื่อระบุสวิตช์ฟิลด์และค่าอาร์กิวเมนต์เป็นข้อความ โหนด หรือแม้แต่ฟิลด์ที่ซ้อนกัน

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทรกฟิลด์ลงในเอกสารโดยใช้ FieldBuilder:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
# Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"}
field_builder = aw.fields.FieldBuilder(aw.fields.FieldType.FIELD_IF)
field_builder.add_argument("left expression")
field_builder.add_argument("=")
field_builder.add_argument("right expression")
field_builder.add_argument(
aw.fields.FieldArgumentBuilder()
.add_text("Firstname: ")
.add_field(aw.fields.FieldBuilder(aw.fields.FieldType.FIELD_MERGE_FIELD).add_argument("firstname")))
field_builder.add_argument(
aw.fields.FieldArgumentBuilder()
.add_text("Lastname: ")
.add_field(aw.fields.FieldBuilder(aw.fields.FieldType.FIELD_MERGE_FIELD).add_argument("lastname")))
# Insert IF field in exact location
field = field_builder.build_and_insert(doc.first_section.body.first_paragraph)
field.update()
doc.save(ARTIFACTS_DIR + "Field.insert_field_using_field_builder.docx")

การแทรกฟิลด์โดยใช้ DOM

คุณยังสามารถแทรกฟิลด์ประเภทต่างๆ โดยใช้ Aspose.Words Document Object Model (DOM) ได้อีกด้วย ในส่วนนี้เราจะดูตัวอย่างบางส่วน

การแทรกเขตข้อมูลผสานลงในเอกสารโดยใช้ DOM

ฟิลด์ MERGEFIELD ในเอกสาร Word สามารถแสดงได้ด้วยคลาส FieldMergeField คุณสามารถใช้คลาส FieldMergeField เพื่อดำเนินการต่อไปนี้:

  • ระบุชื่อช่องผสาน
  • ระบุการจัดรูปแบบของช่องผสาน
  • ระบุข้อความที่อยู่ระหว่างตัวคั่นฟิลด์และส่วนท้ายของฟิลด์ผสาน
  • ระบุข้อความที่จะแทรกหลังช่องผสานหากช่องไม่ว่างเปล่า
  • ระบุข้อความที่จะแทรกก่อนช่องผสานหากช่องไม่ว่างเปล่า

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ Merge โดยใช้ DOM ลงในย่อหน้าในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph()
builder.move_to(para)
# We want to insert a merge field like this:
# " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v"
field = builder.insert_field(aw.fields.FieldType.FIELD_MERGE_FIELD, False).as_field_merge_field()
# " MERGEFIELD Test1"
field.field_name = "Test1"
# " MERGEFIELD Test1 \\b Test2"
field.text_before = "Test2"
# " MERGEFIELD Test1 \\b Test2 \\f Test3
field.text_after = "Test3"
# " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m"
field.is_mapped = True
# " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v"
field.is_vertical_formatting = True
field.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_merge_field_using_dom.docx")

การแทรกฟิลด์ Mail Merge ADDRESSBLOCK ลงในเอกสารโดยใช้ DOM

ช่อง ADDRESSBLOCK ใช้เพื่อแทรกบล็อกที่อยู่ Mail Merge ในเอกสาร Word ฟิลด์ ADDRESSBLOCK ในเอกสาร Word สามารถแสดงด้วยคลาส FieldAddressBlock คุณสามารถใช้คลาส FieldAddressBlock เพื่อดำเนินการต่อไปนี้:

  • ระบุว่าจะรวมชื่อประเทศ/ภูมิภาคในช่องหรือไม่
  • ระบุว่าจะจัดรูปแบบที่อยู่ตามประเทศ/ภูมิภาคของผู้รับตามที่กำหนดโดย POST*CODE (Universal Postal Union 2006)
  • ระบุชื่อประเทศ/ภูมิภาคที่ยกเว้น
  • ระบุรูปแบบชื่อและที่อยู่
  • ระบุรหัสภาษาที่ใช้ในการจัดรูปแบบที่อยู่

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ Mail Merge ADDRESSBLOCK โดยใช้ DOM ให้กับย่อหน้าในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph()
builder.move_to(para)
# We want to insert a mail merge address block like this:
# ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\"
field = builder.insert_field(aw.fields.FieldType.FIELD_ADDRESS_BLOCK, False).as_field_address_block()
# ADDRESSBLOCK \\c 1"
field.include_country_or_region_name = "1"
# ADDRESSBLOCK \\c 1 \\d"
field.format_address_on_country_or_region = True
# ADDRESSBLOCK \\c 1 \\d \\e Test2
field.excluded_country_or_region_name = "Test2"
# ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3
field.name_and_address_format = "Test3"
# ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\"
field.language_id = "Test 4"
field.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_mail_merge_address_block_field_using_dom.docx")

การแทรกฟิลด์ ADVANCE ลงในเอกสารโดยไม่ต้องใช้ DocumentBuilder

ช่อง ADVANCE ใช้เพื่อชดเชยข้อความที่ตามมาภายในบรรทัดทางซ้าย ขวา ขึ้นหรือลง ฟิลด์ ADVANCE ในเอกสาร Word สามารถแสดงได้ด้วยคลาส FieldAdvance คุณสามารถใช้คลาส FieldAdvance เพื่อดำเนินการต่อไปนี้:

  • ระบุจำนวนจุดที่ควรย้ายข้อความที่ตามหลังฟิลด์ในแนวตั้งจากขอบด้านบนของหน้า
  • ระบุจำนวนจุดที่ควรย้ายข้อความที่ตามหลังฟิลด์ในแนวนอนจากขอบด้านซ้ายของคอลัมน์ กรอบ หรือกล่องข้อความ
  • ระบุจำนวนจุดที่ข้อความที่อยู่หลังฟิลด์ควรเลื่อนไปทางซ้าย ขวา ขึ้นหรือลง

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ ADVANCE โดยใช้ DOM ลงในย่อหน้าในเอกสาร

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph()
# We want to insert an Advance field like this:
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100
field = para.append_field(aw.fields.FieldType.FIELD_ADVANCE, False).as_field_advance()
# ADVANCE \\d 10 "
field.down_offset = "10"
# ADVANCE \\d 10 \\l 10
field.left_offset = "10"
# ADVANCE \\d 10 \\l 10 \\r -3.3
field.right_offset = "-3.3"
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0
field.up_offset = "0"
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100
field.horizontal_position = "100"
# ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100
field.vertical_position = "100"
field.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_advance_field_with_out_document_builder.docx")

การแทรกฟิลด์ ASK ลงในเอกสารโดยไม่ต้องใช้ DocumentBuilder

ช่อง ASK ใช้เพื่อแจ้งให้ผู้ใช้ป้อนข้อความเพื่อกำหนดให้กับบุ๊กมาร์กในเอกสาร Word ฟิลด์ ASK ในเอกสาร Word สามารถแสดงโดยคลาส FieldAsk คุณสามารถใช้คลาส FieldAsk เพื่อดำเนินการต่อไปนี้:

  • ระบุชื่อบุ๊คมาร์ค
  • ระบุการตอบสนองของผู้ใช้เริ่มต้น (ค่าเริ่มต้นที่มีอยู่ในหน้าต่างแจ้ง)
  • ระบุว่าควรได้รับการตอบสนองของผู้ใช้หนึ่งครั้งต่อการดำเนินการ Mail Merge หรือไม่
  • ระบุข้อความพร้อมท์ (ชื่อของหน้าต่างพร้อมท์)

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ ASK โดยใช้ DOM ลงในย่อหน้าในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph()
# We want to insert an Ask field like this:
# ASK \"Test 1\" Test2 \\d Test3 \\o
field = para.append_field(aw.fields.FieldType.FIELD_ASK, False).as_field_ask()
# ASK \"Test 1\" "
field.bookmark_name = "Test 1"
# ASK \"Test 1\" Test2
field.prompt_text = "Test2"
# ASK \"Test 1\" Test2 \\d Test3
field.default_response = "Test3"
# ASK \"Test 1\" Test2 \\d Test3 \\o
field.prompt_once_on_mail_merge = True
field.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_ask_field_with_out_document_builder.docx")

การแทรกฟิลด์ AUTHOR ลงในเอกสารโดยไม่ต้องใช้ DocumentBuilder

ฟิลด์ AUTHOR ใช้เพื่อระบุชื่อผู้เขียนเอกสารจากคุณสมบัติ Document ช่อง AUTHOR ในเอกสาร Word สามารถแสดงได้ด้วยคลาส FieldAuthor คุณสามารถใช้คลาส FieldAuthor เพื่อดำเนินการต่อไปนี้:

  • ระบุชื่อผู้เขียนเอกสาร

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ AUTHOR โดยใช้ DOM ลงในย่อหน้าในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
para = doc.get_child_nodes(aw.NodeType.PARAGRAPH, True)[0].as_paragraph()
# We want to insert an AUTHOR field like this:
# AUTHOR Test1
field = para.append_field(aw.fields.FieldType.FIELD_AUTHOR, False).as_field_author()
field.author_name = "Test1" # AUTHOR Test1
field.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_author_field.docx")

การแทรกฟิลด์ INCLUDETEXT ลงในเอกสารโดยไม่ต้องใช้ DocumentBuilder

ช่อง INCLUDETEXT จะแทรกข้อความและกราฟิกที่มีอยู่ในเอกสารที่มีชื่ออยู่ในโค้ดช่อง คุณสามารถแทรกเอกสารทั้งหมดหรือบางส่วนของเอกสารที่อ้างอิงโดยบุ๊กมาร์กได้ ฟิลด์นี้ในเอกสาร Word แสดงโดย INCLUDETEXT คุณสามารถใช้คลาส FieldIncludeText เพื่อดำเนินการต่อไปนี้:

  • ระบุชื่อบุ๊คมาร์คของเอกสารที่รวมไว้
  • ระบุตำแหน่งของเอกสาร

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ INCLUDETEXT โดยใช้ DOM ลงในย่อหน้าในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
para = aw.Paragraph(doc)
# We want to insert an INCLUDETEXT field like this:
# INCLUDETEXT "file path"
fieldIncludeText = para.append_field(aw.fields.FieldType.FIELD_INCLUDE_TEXT, False).as_field_include_text()
fieldIncludeText.bookmark_name = "bookmark"
fieldIncludeText.source_full_name = docs_base.my_dir + "IncludeText.docx"
doc.first_section.body.append_child(para)
fieldIncludeText.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_include_field_without_document_builder.docx")

การแทรกฟิลด์ TOA ลงในเอกสารโดยไม่ต้องใช้ DocumentBuilder

ช่อง TOA (สารบัญหน่วยงาน) จะสร้างและแทรกสารบัญหน่วยงาน ฟิลด์ TOA รวบรวมรายการที่ทำเครื่องหมายโดยฟิลด์ TA (Table of Authorities Entry) Microsoft Office Word จะแทรกฟิลด์ TOA เมื่อคุณคลิก แทรกสารบัญ ในกลุ่ม ตารางอำนาจ บนแท็บ References เมื่อคุณดูช่อง TOA ในเอกสารของคุณ ไวยากรณ์จะมีลักษณะดังนี้:

{ TOA [Switches ] }

คุณสามารถใช้คลาส FieldToa เพื่อดำเนินการกับฟิลด์ TOA

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเพิ่มฟิลด์ TOA โดยใช้ DOM ลงในย่อหน้าในเอกสาร:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
para = aw.Paragraph(doc)
# We want to insert TA and TOA fields like this:
# TA \c 1 \l "Value 0"
# TOA \c 1
fieldTA = para.append_field(aw.fields.FieldType.FIELD_TOAENTRY, False).as_field_ta()
fieldTA.entry_category = "1"
fieldTA.long_citation = "Value 0"
doc.first_section.body.append_child(para)
para = aw.Paragraph(doc)
fieldToa = para.append_field(aw.fields.FieldType.FIELD_TOA, False).as_field_toa()
fieldToa.entry_category = "1"
doc.first_section.body.append_child(para)
fieldToa.update()
doc.save(docs_base.artifacts_dir + "WorkingWithFields.insert_toa_field_without_document_builder.docx")