ภาพรวมของฟิลด์

Aspose.Words เป็นไลบรารีคลาสที่ออกแบบมาสำหรับการประมวลผลเอกสาร Microsoft Word ฝั่งเซิร์ฟเวอร์ และรองรับช่องต่างๆ ด้วยวิธีต่อไปนี้:

  • ฟิลด์ทั้งหมดในเอกสารจะถูกเก็บรักษาไว้ระหว่างการเปิด/บันทึกและการแปลง
  • สามารถอัปเดตผลลัพธ์ของฟิลด์ส่วนใหญ่ได้

ในบทความนี้ เราจะเรียนรู้เพิ่มเติมเกี่ยวกับโครงสร้างช่อง ช่องที่รองรับใน Aspose.Words และรายละเอียดการทำงานกับช่องดังกล่าว

โครงสร้างสนาม

ฟิลด์ประกอบด้วย:

  • โหนดเริ่มต้นของฟิลด์และโหนดคั่นใช้เพื่อรวมเนื้อหาที่ประกอบขึ้นเป็นโค้ดฟิลด์ (โดยปกติจะเป็นข้อความธรรมดา)
  • ตัวคั่นฟิลด์และจุดสิ้นสุดของฟิลด์จะรวมผลลัพธ์ของฟิลด์ไว้ด้วย ซึ่งสามารถประกอบด้วยเนื้อหาหลายประเภทตั้งแต่การเรียกใช้ข้อความ ย่อหน้า ไปจนถึงตาราง
  • บางฟิลด์อาจไม่มีตัวคั่น ซึ่งหมายความว่าเนื้อหาทั้งหมดประกอบขึ้นเป็นโค้ดฟิลด์
  • รหัสฟิลด์จะกำหนดพฤติกรรมของฟิลด์ และประกอบด้วยตัวระบุฟิลด์ และมักจะเป็นพารามิเตอร์อื่นๆ เช่น ชื่อฟิลด์และสวิตช์
  • ผลลัพธ์ของฟิลด์ประกอบด้วยการประเมินล่าสุดของฟิลด์ ค่านี้จะถูกเก็บไว้ในผลลัพธ์ของฟิลด์และเป็นสิ่งที่แสดงให้ผู้ใช้เห็น บางฟิลด์อาจไม่มีผลฟิลด์ใด ๆ ดังนั้นจะไม่แสดงสิ่งใดในเอกสาร ในทำนองเดียวกันบางฟิลด์อาจไม่ได้รับการอัปเดตดังนั้นจึงไม่มีผลลัพธ์ของฟิลด์เช่นกัน

fields-aspose-words

เนื้อหาที่ประกอบเป็นโค้ดฟิลด์จะถูกจัดเก็บเป็นโหนด Run ระหว่าง FieldStart และ FieldSeparator ผลลัพธ์ของฟิลด์จะถูกจัดเก็บไว้ระหว่างโหนด FieldSeparator และ FieldEnd และสามารถประกอบด้วยเนื้อหาประเภทต่างๆ ได้ โดยปกติผลลัพธ์ของฟิลด์จะมีเพียงข้อความที่ประกอบด้วยโหนด Run อย่างไรก็ตาม เป็นไปได้ที่โหนด FieldEnd จะอยู่ในย่อหน้าที่ต่างกันโดยสิ้นเชิง และทำให้ผลลัพธ์ของฟิลด์ประกอบด้วยโหนด ระดับลอจิคัลของโหนดในเอกสาร เช่น โหนด Table และ Paragraph เช่นกัน

ต่อไปนี้คือภาพวิธีจัดเก็บช่องใน Aspose.Words โดยใช้ตัวอย่าง “DocumentExplorer” ซึ่งอยู่ใน Github

document-explorer-aspose-words

ช่องใน Aspose.Words Document Object Model (DOM)

เมื่อโหลดเอกสารลงใน Aspose.Words ช่องของเอกสารจะถูกโหลดลงใน Aspose.Words Document Object Model (DOM) เป็นชุดของส่วนประกอบ (โหนด) ที่แยกจากกัน โหลดฟิลด์เดียวเป็นคอลเลกชันของโหนด FieldStart, FieldSeparator และ FieldEnd พร้อมด้วยเนื้อหาที่อยู่ระหว่างโหนดเหล่านี้ หากฟิลด์ไม่มีผลลัพธ์ของฟิลด์ ก็จะไม่มีโหนด FieldSeparator โหนดเหล่านี้ทั้งหมดจะพบได้ในบรรทัดเสมอ (ในฐานะลูกของ Paragraph หรือ SmartTag

ใน Aspose.Words แต่ละโหนด FieldXXX ได้มาจาก FieldChar คลาสนี้จัดเตรียมคุณสมบัติเพื่อตรวจสอบประเภทของฟิลด์ที่แสดงโดยโหนดที่ระบุผ่านคุณสมบัติ FieldType ตัวอย่างเช่น FieldType.FieldMergeField แสดงถึงฟิลด์ผสานในเอกสาร

ฟิลด์ที่รองรับ

Aspose.Words เวอร์ชันปัจจุบันรองรับการคำนวณช่องต่อไปนี้:

  • = (สูตร)
  • ADDRESSBLOCK
  • ASK
  • AUTHOR
  • AUTONUM
  • AUTONUMLGL
  • AUTONUMOUT
  • AUTOTEXT
  • BARCODE
  • COMMENTS
  • COMPARE
  • CREATEDATE
  • DATABASE
  • DATE
  • DISPLAYBARCODE
  • DOCPROPERTY
  • DOCVARIABLE
  • EDITTIME
  • EQ
  • FILENAME
  • FILESIZE
  • FILLIN
  • FORMCHECKBOX
  • FORMDROPDOWN
  • FORMTEXT
  • GLOSSARY
  • GOTOBUTTON
  • GREETINGLINE
  • HYPERLINK
  • IF
  • IMPORT
  • INCLUDE
  • INCLUDEPICTURE
  • INCLUDETEXT
  • INDEX
  • INFO
  • KEYWORDS
  • LASTSAVEDBY
  • LISTNUM
  • MACROBUTTON
  • MERGEBARCODE
  • MERGEFIELD
  • MERGEREC
  • MERGESEQ
  • NEXT
  • NEXTIF
  • NOTEREF
  • NUMCHARS
  • NUMPAGES
  • NUMWORDS
  • PAGE
  • PAGEREF
  • PRINTDATE
  • QUOTE
  • REF
  • REVNUM
  • SAVEDATE
  • SECTION
  • SECTIONPAGES
  • SEQ
  • SET
  • SHAPE
  • SKIPIF
  • STYLEREF
  • SUBJECT
  • SYMBOL
  • TEMPLATE
  • TIME
  • TITLE
  • TOA
  • TOC
  • USERADDRESS
  • USERINITIALS
  • USERNAME

การแยกวิเคราะห์ฟิลด์ที่ซับซ้อน

Aspose.Words ปฏิบัติตามวิธีที่ Microsoft Word ประมวลผลช่องต่างๆ และด้วยเหตุนี้จึงจัดการได้อย่างถูกต้อง:

  • ฟิลด์ที่ซ้อนกัน: IF { =OR({ COMPARE { =2.5 +PRODUCT(3,5 ,8.4) } > 4}, { =2/2 }) } = 1 "Credit not acceptable" "Credit acceptable"
  • อาร์กิวเมนต์ของฟิลด์อาจเป็นผลมาจากฟิลด์ที่ซ้อนกัน
  • สามารถซ้อนฟิลด์ต่างๆ ไว้ในรหัสฟิลด์และผลลัพธ์ของฟิลด์ได้
  • ช่องว่าง/ไม่มีการเว้นวรรค, เครื่องหมายคำพูด/ไม่มีเครื่องหมายคำพูด, อักขระหลีกในช่อง ฯลฯ: MERGEFIELD \f"Text after""Field \n\ame with \" and \\\ and \\\*"\bTextBefor\e
  • ฟิลด์ที่ครอบคลุมหลายย่อหน้า

ฟิลด์สูตร

Aspose.Words มีการใช้งาน Formula Engine อย่างจริงจังและรองรับสิ่งต่อไปนี้:

  • ตัวดำเนินการทางคณิตศาสตร์และตรรกะ: =(54+4*(6-77)-(5))+(-6-5)/4/5
  • ฟังก์ชั่น: =ABS(-01.4)+2.645/(5.6^3.5)+776457 \\\# "#,##0"
  • การอ้างอิงถึงบุ๊กมาร์ก: =IF(C>4, 5,ABS(A)*.76) +3.85
  • สวิตช์การจัดรูปแบบตัวเลข: =00000000 \\\# "$#,##0.00;($#,##0.00)"

รองรับฟังก์ชันต่อไปนี้ในนิพจน์: ABS, AND, AVERAGE, COUNT, DEFINED, FALSE, IF, INT, MAX, MIN, MOD, NOT, OR, PRODUCT, ROUND, SIGN, SUM, TRUE

ช่อง IF และ COMPARE

นิพจน์ IF บางส่วนที่ Aspose.Words สามารถคำนวณได้ง่ายควรช่วยให้คุณทราบว่าคุณลักษณะนี้มีประสิทธิภาพเพียงใด:

  • IF 3 > 5.7^4+MAX(4,3) True False
  • IF "abcd" > "abc" True False
  • IF "?ab*" = "1abdsg" True False
  • IF 4 = "2*2" True False
  • COMPARE 3+5/34 < 4.6/3/2

ช่อง DATE และ TIME

Aspose.Words รองรับสวิตช์การจัดรูปแบบวันที่และเวลาทั้งหมดที่มีอยู่ใน Microsoft Word ตัวอย่างบางส่วน ได้แก่

  • DATE @ "d-MMM-yy"
  • DATE @ "d/MM/yyyy h:mm am/pm

ช่อง Mail Merge

Aspose.Words ไม่จำกัดความซับซ้อนของช่อง mail merge ในเอกสารของคุณ และรองรับช่อง IF และช่องสูตรที่ซ้อนกัน และยังคำนวณชื่อช่องผสานโดยใช้สูตรได้ด้วย

ตัวอย่างบางส่วนของช่อง mail merge ที่ Aspose.Words รองรับ:

  • สวิตช์ฟิลด์ Mail merge: MERGEFIELD FirstName \\\\\\\\* FirstCap \b "Mr. "
  • เขตข้อมูลผสานที่ซ้อนกันในสูตร: IF { MERGEFIELDValue1 } >= {MERGEFIELD Value2 } True False
  • คำนวณชื่อของเขตข้อมูลผสานที่รันไทม์: MERGEFIELD { IF{MERGEFIELDValue1 } >= {MERGEFIELD Value2 } FirstName"LastName" }
  • การย้ายแบบมีเงื่อนไขไปยังบันทึกถัดไปในแหล่งข้อมูล: NEXTIF { MERGEFIELDValue1 } <= { =IF(-2.45 >= 6*{MERGEFIELD Value2 }, 2, -.45) }

ฟอร์แมตสวิตช์

ช่องในเอกสารอาจมีสวิตช์การจัดรูปแบบที่ระบุวิธีจัดรูปแบบค่าผลลัพธ์ Aspose.Words รองรับสวิตช์รูปแบบต่อไปนี้:

  • \@ – การจัดรูปแบบวันที่และเวลา
  • \# – การจัดรูปแบบตัวเลข
  • \* ตัวพิมพ์ใหญ่
  • \* เฟิร์สแคป
  • \* ต่ำกว่า
  • \* บน
  • \* CHARFORMAT – จัดรูปแบบผลลัพธ์ตามอักขระตัวแรกของโค้ดฟิลด์
  • \* MERGEFORMAT – จัดรูปแบบผลลัพธ์ตามรูปแบบผลลัพธ์เก่า

การจัดรูปแบบ Date และตัวเลขในฟิลด์

เมื่อ Aspose.Words คำนวณผลลัพธ์ของฟิลด์ มักจะจำเป็นต้องแยกวิเคราะห์สตริงเป็นตัวเลขหรือค่าวันที่ และยังต้องจัดรูปแบบกลับเป็นสตริงด้วย ตามค่าเริ่มต้น Aspose.Words จะใช้วัฒนธรรมเธรดปัจจุบันเพื่อดำเนินการแยกวิเคราะห์และจัดรูปแบบเมื่อคำนวณค่าของฟิลด์ในระหว่างการอัพเดตฟิลด์ และ mail merge นอกจากนี้ยังมีตัวเลือกที่ให้ไว้ในรูปแบบของคลาส FieldOptions ซึ่งช่วยให้สามารถควบคุมได้มากขึ้นว่าจะใช้วัฒนธรรมใดในระหว่างการอัพเดตภาคสนาม

  • โดยค่าเริ่มต้น คุณสมบัติ FieldUpdateCultureSource จะถูกตั้งค่าเป็น CurrentThread ซึ่งจัดรูปแบบฟิลด์โดยใช้วัฒนธรรมเธรดปัจจุบัน
  • คุณสมบัตินี้สามารถตั้งค่าเป็น FieldCode ได้ ดังนั้นภาษาที่ตั้งค่าจากรหัสฟิลด์ของฟิลด์จะถูกใช้สำหรับการจัดรูปแบบแทน

การจัดรูปแบบโดยใช้วัฒนธรรมของเธรดปัจจุบัน

หากต้องการควบคุมวัฒนธรรมที่ใช้ในระหว่างการคำนวณภาคสนาม เพียงตั้งค่าคุณสมบัติ Thread.CurrentThread.CurrentCulture ให้เป็นวัฒนธรรมที่คุณเลือกก่อนที่จะเรียกใช้การคำนวณภาคสนาม

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

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

การจัดรูปแบบโดยใช้วัฒนธรรมในเอกสาร

ในทางกลับกัน Microsoft Word จัดรูปแบบแต่ละฟิลด์ตามภาษาของข้อความที่พบในฟิลด์ (โดยเฉพาะ การเรียกใช้จากโค้ดฟิลด์) บางครั้งในระหว่างการอัปเดตฟิลด์ นี่อาจเป็นลักษณะการทำงานที่ต้องการ ตัวอย่างเช่น ถ้าคุณมีเอกสารโกลบอลไลซ์ที่มีเนื้อหาที่ประกอบด้วยภาษาต่างๆ มากมาย และต้องการให้แต่ละฟิลด์ให้เกียรติสถานที่ที่ใช้จากข้อความ Aspose.Words ยังรองรับฟังก์ชันนี้ด้วย

คลาส Document จัดเตรียมคุณสมบัติ FieldOptions ซึ่งมีสมาชิกซึ่งสามารถใช้เพื่อควบคุมวิธีการอัปเดตฟิลด์ภายในเอกสาร

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีระบุตำแหน่งวัฒนธรรมที่ใช้สำหรับการจัดรูปแบบวันที่ในระหว่างการอัพเดตฟิลด์และเลือก mail merge จาก: