วิธีทำงานกับลิงก์และการอ้างอิงของ Word ใน .NET

วิธีทำงานกับลิงก์และการอ้างอิงของ Word ใน .NET

คู่มือนี้แสดงวิธีแทรกลิงก์, การอ้างอิงข้ามไปยังบุ๊กมาร์ค, ฟิลด์ค่าที่ถูกขอ, และฟิลด์การอ้างอิงใน Aspose.Words FOSS สำหรับ .NET, โดยใช้ FieldHyperlink, FieldRef, FieldPageRef, FieldCitation, และลิงก์และการอ้างอิงอื่น ๆ Field ช่วงย่อยใน Aspose.Words.Fields namespace. ครอบคลุมการแทรกลิงก์อย่างง่าย, การสร้างบุ๊กมาร์คและการอ้างอิงข้าม, การขอค่าระหว่างการอัปเดตฟิลด์, และการอ้างอิงแหล่งบรรณานุกรม.

คู่มือแบบทีละขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพคเกจ

Aspose.Words FOSS for .NET ยังไม่ได้เผยแพร่แพคเกจ NuGet – ให้สร้างไลบรารีจากซอร์สโค้ดแทน. คลอน https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, จากนั้นสร้าง Aspose.Words.sln ในโหมด Release ด้วย .NET SDK และอ้างอิงแอสเซ็มบลี Aspose.Words ที่ได้จากโปรเจกต์ของคุณ. ไลบรารีนี้มุ่งเป้าไปที่ .NET Standard 2.0, ดังนั้นจึงทำงานบน .NET Framework 4.6.2+ และ .NET 6/8/10.


ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น

เพิ่มคำสั่ง using Aspose.Words; สำหรับ Document และ DocumentBuilder, และคำสั่ง using Aspose.Words.Fields; สำหรับ FieldHyperlink, FieldRef, FieldPageRef, FieldNoteRef, FieldStyleRef, FieldSet, FieldAsk, FieldFillIn, FieldCitation, FieldBibliography, รวมถึงคลาสฟิลด์อื่น ๆ ที่คู่มือนี้ครอบคลุม.


ขั้นตอนที่ 3: แทรกลิงก์ไฮเปอร์

สำหรับไฮเปอร์ลิงก์แบบง่าย ให้เรียก DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark) – ส่งค่า isBookmark: false สำหรับเป้าหมาย URL หรือ true เพื่อเชื่อมโยงไปยังบุ๊กมาร์กในเอกสารเดียวกัน เมื่อต้องการสร้าง FieldHyperlink โดยตรงเมื่อคุณสมบัติที่ทางลัดไม่เปิดเผยจำเป็น: Address และ SubAddress เก็บ URL ปลายทางหรือที่ตั้งในเอกสาร, ScreenTip ตั้งค่า tooltip ที่แสดงเมื่อวางเมาส์, OpenInNewWindow และ IsImageMap เป็นแฟล็กการแสดงผล, และ Target ระบุชื่อเฟรมของเบราว์เซอร์.


ขั้นตอนที่ 4: สร้างบุ๊กมาร์กเพื่ออ้างอิง

เรียก DocumentBuilder.StartBookmark(bookmarkName) ก่อนเนื้อหาที่บุ๊กมาร์กควรคลุม, และ DocumentBuilder.EndBookmark(bookmarkName) หลังจากนั้น, โดยใช้ชื่อเดียวกันสำหรับทั้งสองการเรียก. DocumentBuilder.MoveToBookmark(bookmarkName) ย้ายเคอร์เซอร์ไปยังบุ๊กมาร์กที่มีอยู่แล้ว – มีประโยชน์สำหรับการนำทางไปยังตำแหน่งก่อนแทรกฟิลด์อ้างอิงข้ามใกล้เคียง.


ขั้นตอนที่ 5: แทรกการอ้างอิงข้ามไปยังบุ๊กมาร์กนั้น

FieldRef (ฟิลด์ REF), FieldPageRef (PAGEREF), และ FieldNoteRef (NOTEREF) แต่ละตัวจะอ้างอิงเนื้อหาที่บุ๊กมาร์กที่กำหนดชื่อผ่านคุณสมบัติ BookmarkName ของมัน. ตั้งค่า InsertHyperlink เพื่อทำให้การอ้างอิงคลิกได้, และ InsertRelativePosition เพื่อรายงานตำแหน่งสัมพัทธ์ (“เหนือ” / “ใต้”) แทนข้อความที่อ้างอิงเอง. FieldRef ยังรองรับตัวเลือกการจัดเลขย่อหน้า – InsertParagraphNumber, InsertParagraphNumberInFullContext, InsertParagraphNumberInRelativeContext, NumberSeparator – และ IncludeNoteOrComment. FieldStyleRef (STYLEREF) จะอ้างอิงถึงย่อหน้าที่ใกล้ที่สุดที่จัดรูปแบบด้วย StyleName ที่กำหนดแทนบุ๊กมาร์ก, โดยใช้ SearchFromBottom เพื่อค้นหาย้อนหลังจากตำแหน่งของฟิลด์. FieldSet (SET) กำหนดค่าข้อความที่บันทึกเป็นบุ๊กมาร์ก – BookmarkName และ BookmarkText – ซึ่งฟิลด์ REF ที่อื่นสามารถอ้างอิงได้.


ขั้นตอนที่ 6: ขอค่าขณะอัปเดต

FieldAsk (ASK) และ FieldFillIn (FILLIN) ขอค่าจากผู้ที่อัปเดตฟิลด์: ตั้งค่า PromptText ต่อข้อความที่แสดงให้ผู้ใช้, DefaultResponse สำหรับค่าที่สำรอง, และ PromptOnceOnMailMerge เพื่อจำกัดการถามซ้ำระหว่างการรวมจดหมาย. FieldAsk นอกจากนี้ยังบันทึกคำตอบของมันที่ BookmarkName ดังนั้นฟิลด์อื่น ๆ สามารถอ้างอิงถึงมันได้. สำหรับการอัปเดตฟิลด์แบบไม่มีผู้ดูแล ให้จัดหาคำตอบโดยใช้โปรแกรมแทนการถามแบบโต้ตอบ; ดูที่ คู่มือฟิลด์ สำหรับอินเทอร์เฟซคอลแบ็กที่ทำเช่นนี้.


ขั้นตอนที่ 7: อ้างอิงเนื้อหาภายนอกหรือที่เชื่อมโยง

FieldDde (DDE) และ FieldDdeAuto (DDEAUTO) เชื่อมโยงไปยังเนื้อหาในแอปพลิเคชันอื่นผ่าน ProgId, SourceFullName, และ SourceItem, โดย InsertAsText, InsertAsHtml, InsertAsPicture, InsertAsRtf, InsertAsUnicode, และ InsertAsBitmap เลือกการแสดงผลที่แทรก, และ AutoUpdate / IsLinked ควบคุมพฤติกรรมการรีเฟรช. FieldLink (LINK) เป็นเทียบเท่า OLE-link, เพิ่ม FormatUpdateType. FieldImport (IMPORT) และ FieldIncludePicture (INCLUDEPICTURE) ดึงกราฟิกภายนอกผ่าน SourceFullName และ GraphicFilter. FieldInclude (INCLUDE) และ FieldIncludeText (INCLUDETEXT) ดึงเนื้อหาเอกสารภายนอก, โดย BookmarkName เพื่อกำหนดช่วงที่รวมและ LockFields เพื่อป้องกันไม่ให้รีเฟรช; FieldIncludeText ยังสนับสนุนแหล่งข้อมูล XML ผ่าน Encoding, MimeType, NamespaceMappings, XPath, และ XslTransformation.


ขั้นตอนที่ 8: อ้างอิงบล็อกการสร้างและรายการอภิธานศัพท์

FieldAutoText (AUTOTEXT), FieldAutoTextList (AUTOTEXTLIST), และ FieldGlossary (GLOSSARY) ทั้งหมดอ้างอิงรายการบล็อกการสร้างที่มีชื่อผ่าน EntryName; FieldAutoTextList เพิ่ม ListStyle และ ScreenTip สำหรับการนำเสนอแบบรายการ.


ขั้นตอนที่ 9: แทรกฟิลด์การอ้างอิงและบรรณานุกรม

FieldCitation (CITATION) และ FieldBibliography (BIBLIOGRAPHY) แสดงเนื้อหาที่มาจากข้อมูลบรรณานุกรมของเอกสาร ตั้งค่า FieldCitation.SourceTag (หรือทางเลือกอื่น AnotherSourceTag) เพื่อระบุว่าแหล่งที่มาที่อ้างอิงคืออะไร, และใช้ Prefix, Suffix, PageNumber, VolumeNumber, และ Suppress* ธง (SuppressAuthor, SuppressTitle, SuppressYear) เพื่อควบคุมรูปแบบการอ้างอิง. FieldBibliography.SourceTag, FilterLanguageId, และ FormatLanguageId ควบคุมว่าแหล่งอ้างอิงใดจะปรากฏในบรรณานุกรมที่แสดงผลและเป็นภาษาอะไร ฟิลด์เหล่านี้จะแสดงผลอย่างถูกต้องก็ต่อเมื่อมีการจับคู่ Source มีบันทึกอยู่ – ดูที่ คู่มือบรรณานุกรม สำหรับการสร้างสิ่งเหล่านั้น.

ปัญหาทั่วไปและการแก้ไข

ฟิลด์ REF, PAGEREF หรือ NOTEREF แสดงผลลัพธ์ข้อผิดพลาด The BookmarkName เป้าหมายที่มันอ้างถึงไม่มีอยู่ในเอกสาร สร้างบุ๊กมาร์กด้วย DocumentBuilder.StartBookmark() / EndBookmark() ก่อนอัปเดตฟิลด์.

ฟิลด์ ASK หรือ FILLIN ปิดกั้นการอัปเดตโดยไม่มีการดูแล ไม่มีการกำหนด callback เพื่อจัดหาคำตอบโดยโปรแกรม กำหนด callback การอัปเดตฟิลด์ที่อธิบายไว้ใน the คู่มือฟิลด์, หรือกำหนด DefaultResponse บนฟิลด์เพื่อให้มีค่าที่สำรอง.

ฟิลด์ CITATION หรือ BIBLIOGRAPHY แสดงเป็นค่าว่าง ส่วน SourceTag ไม่ตรงกับใด Source ในข้อมูลบรรณานุกรมของเอกสาร. เพิ่มที่ตรงกัน Source – ดู คู่มือบรรณานุกรม.

ฟิลด์ DDE, DDEAUTO หรือ LINK ไม่อัปเดต ฟิลด์เหล่านี้อ้างอิงแหล่งข้อมูล OLE ภายนอกที่ไม่สามารถเข้าถึงได้นอกบริบท Windows/OLE ดั้งเดิม ให้ถือผลลัพธ์ที่เก็บไว้ของฟิลด์เป็นค่าที่ทราบล่าสุดในสถานการณ์นี้.

ไฮเปอร์ลิงก์ที่แทรกด้วย InsertHyperlink ขาดคุณสมบัติที่ฉันต้องการ DocumentBuilder.InsertHyperlink() เป็นทางลัดที่ไม่ได้เปิดเผยทุก FieldHyperlink คุณสมบัติ สร้างหรือดึงข้อมูล FieldHyperlink โดยตรงเพื่อกำหนดคุณสมบัติเช่น ScreenTip or IsImageMap.

คำถามที่พบบ่อย

ความแตกต่างระหว่าง FieldRef กับ FieldStyleRef คืออะไร?

FieldRef แก้ไขเป็นเนื้อหาที่บุกมาร์กชื่อ (BookmarkName); ส่วน FieldStyleRef จะแก้ไขเป็นย่อหน้าที่ใกล้ที่สุดที่มีรูปแบบตาม StyleName ที่กำหนดไว้, ไม่ขึ้นกับบุกมาร์ก.

ฉันจะใส่ลิงก์ไฮเปอร์เท็กซ์แบบง่ายโดยไม่ต้องสร้าง Field ด้วยตนเองอย่างไร?

เรียก DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark).

คลาสฟิลด์ลิงก์และการอ้างอิงเหล่านี้อยู่ในเนมสเปซแยกจากฟิลด์อื่น ๆ หรือไม่?

ไม่ – FieldHyperlink, FieldRef, FieldCitation และคลาสอื่น ๆ ที่กล่าวถึงที่นี่เป็นซับคลาส Field ธรรมดาในเนมสเปซ Aspose.Words.Fields ซึ่งเป็นเนมสเปซเดียวกันที่ใช้กับประเภทฟิลด์อื่น ๆ ทุกประเภท.

ฟิลด์การอ้างอิงเชื่อมโยงกับโมเดลข้อมูลบรรณานุกรมอย่างไร?

FieldCitation and FieldBibliography เรนเดอร์เนื้อหาโดยการค้นหา SourceTag ต่อกับ Source บันทึกที่อธิบายไว้ใน คู่มือบรรณานุกรม – คลาสฟิลด์เหล่านี้จัดการการเรนเดอร์, ในขณะที่ Source and Contributor คลาสเก็บข้อมูลพื้นฐาน.

ฉันจะสร้างบุ๊คมาร์คก่อนอ้างอิงมันอย่างไร?

เรียก DocumentBuilder.StartBookmark(bookmarkName) ก่อนเนื้อหา และ DocumentBuilder.EndBookmark(bookmarkName) หลังจากนั้น โดยใช้ชื่อเดียวกันสำหรับทั้งสองการเรียก.

ดูเพิ่มเติม

 ภาษาไทย