Bookmarks
Bookmarks
คู่มือนี้แสดงวิธีการอ่าน, แทรก, ไปยัง, และลบที่คั่นหน้าในเอกสาร Word ด้วย Aspose.Words FOSS สำหรับ .NET. ที่คั่นหน้าจะทำเครื่องหมายตำแหน่งหรือช่วงของเนื้อหาที่มีชื่อ เพื่อให้สามารถค้นหา, ไปยัง, หรือใช้เป็นจุดแทรกสำหรับการแก้ไขเพิ่มเติมได้. Aspose.Words FOSS สำหรับ .NET แสดงที่คั่นหน้าด้วยคลาส Bookmark, BookmarkStart, และ BookmarkEnd, และให้เมธอด DocumentBuilder สำหรับการสร้างและค้นหาพวกมันขณะเขียนหรือแก้ไขเอกสาร.
การอ่านที่คั่นหน้า
ทุก Range จะเปิดเผยที่คั่นหน้าที่มันบรรจุผ่านคุณสมบัติ Bookmarks, ซึ่งคืนค่า BookmarkCollection. เนื่องจาก Document เองเปิดเผย Range, doc.Range.Bookmarks จะคืนค่าที่คั่นหน้าทั้งหมดในเอกสาร. ค้นหาที่คั่นหน้าเฉพาะโดยชื่อด้วยตัวชี้ดัชนี BookmarkCollection — bookmarks[bookmarkName] — ตรวจสอบจำนวนที่มีด้วย Count, หรือเดินทางผ่านคอลเลกชันทั้งหมดด้วย GetEnumerator(). แต่ละ Bookmark จะเปิดเผย Name ของมันและข้อความที่ห่อหุ้มผ่าน Text.
การแทรกที่คั่นหน้าด้วย DocumentBuilder
DocumentBuilder คือวิธีทั่วไปในการสร้างที่คั่นหน้าในขณะเขียนเอกสาร. เรียก StartBookmark(bookmarkName) ก่อนแทรกเนื้อหา, จากนั้นเรียก EndBookmark(bookmarkName) หลังจากนั้น — ตัวสร้างจะห่อหุ้มทุกอย่างที่เขียนระหว่างเป็นช่วงที่คั่นหน้า. สำหรับช่วงของคอลัมน์ตาราง, ใช้ StartColumnBookmark(bookmarkName) และ EndColumnBookmark(bookmarkName) แทน; Bookmark.IsColumn ที่ได้จะเป็น true, โดยมี FirstColumn และ LastColumn ระบุช่วงคอลัมน์ที่ทำเครื่องหมาย. เพื่อย้ายตำแหน่งของตัวสร้างไปยังที่คั่นหน้าที่มีอยู่สำหรับการแก้ไขเพิ่มเติม, เรียก MoveToBookmark(bookmarkName), หรือ overload MoveToBookmark(bookmarkName, isStart, isAfter) เพื่อควบคุมว่าตัวชี้จะไปอยู่ที่ปลายของที่คั่นหน้าที่ไหน.
โครงสร้างที่คั่นหน้าในต้นไม้เอกสาร
ที่คั่นหนังสือจะแสดงในต้นไม้เอกสารเป็นคู่ของโหนด: BookmarkStart และ BookmarkEnd ทั้งสองสร้างเป็น BookmarkStart(doc, name) / BookmarkEnd(doc, name). แต่ละโหนดเชื่อมกลับไปยังวัตถุ Bookmark เชิงตรรกะของมัน — BookmarkStart.Bookmark จะคืนค่าให้, และ Bookmark จะเปิดเผยคุณสมบัติ BookmarkStart และ BookmarkEnd ที่ชี้ไปยังโหนดขอบเขตสองด้านของมัน. เนื่องจาก BookmarkStart และ BookmarkEnd เป็นโหนดธรรมดา, พวกมันจึงสนับสนุนการดำเนินการมาตรฐานของโหนด เช่น GetText(), Clone(isCloneChildren), และ GetAncestor(ancestorType), และสามารถค้นหาได้โดยการเดินตามต้นไม้เช่นโหนดประเภทอื่น ๆ.
การลบที่คั่นหนังสือ
เรียก Bookmark.Remove() เพื่อทำการลบตัวทำเครื่องหมายเริ่มต้นและสิ้นสุดของที่คั่นหนังสือเดียว — การกระทำนี้จะลบเฉพาะที่คั่นหนังสือเอง, ไม่ได้ลบเนื้อหาในเอกสารที่มันล้อมรอบ. หากต้องการลบที่คั่นหนังสือเป็นกลุ่ม, ใช้ BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) หรือ Clear() เพื่อลบที่คั่นหนังสือทั้งหมดในช่วงนั้นพร้อมกัน.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- ควรใช้ดัชนี
BookmarkCollection(bookmarks["BookmarkName"]) แทนการวนซ้ำด้วยตนเองเมื่อคุณทราบชื่อของที่คั่นหนังสือเป้าหมายแล้ว. - ควรเรียก
StartBookmark(name)ร่วมกับการเรียกEndBookmark(name)ที่ตรงกันโดยใช้ชื่อเดียวกันเสมอ — คู่ที่ไม่ตรงกันจะทำให้ที่คั่นหนังสือไม่สมบูรณ์. - ตรวจสอบ
Bookmark.IsColumnก่อนอ่านFirstColumnหรือLastColumn— สองคุณสมบัตินี้มีความหมายเฉพาะสำหรับที่คั่นหนังสือแบบคอลัมน์ที่สร้างด้วยStartColumnBookmark/EndColumnBookmark. Bookmark.Remove()ลบเฉพาะเครื่องหมายที่คั่นหนังสือ, ไม่ได้ลบข้อความที่อยู่ภายใน, ดังนั้นการลบที่คั่นหนังสือจะไม่ทำให้เนื้อหาในเอกสารถูกลบ.- ใช้
DocumentBuilder.MoveToBookmark()เพื่อกระโดดเคอร์เซอร์ของตัวสร้างไปยังตำแหน่งที่รู้จักแทนการค้นหาแบบแมนนวลในต้นไม้โหนดเพื่อหาBookmarkStart.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ไข |
|---|---|---|
BookmarkCollection indexer คืนค่า null สำหรับการค้นหาชื่อ | ชื่อบุ๊กมาร์คไม่มีอยู่ในช่วงที่กำลังค้นหา | แสดงรายการชื่อก่อนโดยใช้ GetEnumerator() เพื่อยืนยันชื่อที่ตรงกันอย่างแม่นยำและคำนึงถึงตัวพิมพ์ใหญ่/เล็ก |
| เนื้อหาที่แทรกไม่ได้รับการบุ๊กมาร์ค | EndBookmark() ไม่เคยถูกเรียกใช้, หรือถูกเรียกใช้ด้วยชื่อที่แตกต่างจาก StartBookmark() | จับคู่ StartBookmark(name) กับ EndBookmark(name) เสมอโดยใช้สตริงชื่อที่เหมือนกัน |
| ข้อมูลบุ๊กมาร์คของคอลัมน์ดูไม่ถูกต้อง | FirstColumn/LastColumn ถูกอ่านโดยไม่ได้ตรวจสอบ IsColumn ก่อน | ให้ตีความ FirstColumn/LastColumn เฉพาะเมื่อ Bookmark.IsColumn เป็น true |
FAQ
ฉันจะดึงบุ๊กมาร์กทั้งหมดในเอกสารได้อย่างไร?
อ่าน doc.Range.Bookmarks ซึ่งจะคืนค่า BookmarkCollection ที่ครอบคลุมเอกสารทั้งหมด.
ฉันสามารถทำบุ๊กมาร์กส่วนของตารางตามคอลัมน์แทนการทำตามช่วงข้อความได้หรือไม่?
ใช่ — ใช้ DocumentBuilder.StartColumnBookmark(bookmarkName) และ EndColumnBookmark(bookmarkName). บุ๊กมาร์กที่ได้จะมี IsColumn ตั้งค่าเป็น true โดยมี FirstColumn/LastColumn ระบุช่วงคอลัมน์.
การลบบุ๊กมาร์กจะลบข้อความที่มันทำเครื่องหมายไว้หรือไม่?
No. Bookmark.Remove() จะลบเฉพาะโหนดเครื่องหมาย BookmarkStart/BookmarkEnd เท่านั้น; เนื้อหาในเอกสารระหว่างนั้นจะไม่ได้รับการแก้ไข.
ฉันจะย้ายเคอร์เซอร์ DocumentBuilder ไปยังบุ๊กมาร์กที่มีอยู่ได้อย่างไร?
เรียกใช้ DocumentBuilder.MoveToBookmark(bookmarkName) หรือ MoveToBookmark(bookmarkName, isStart, isAfter) เพื่อควบคุมว่ากอร์เซอร์จะไปอยู่ที่จุดเริ่มต้นหรือจุดสิ้นสุดของบุ๊กมาร์ก.
ความแตกต่างระหว่างการโอเวอร์โหลดของ BookmarkCollection.Remove() คืออะไร?
Remove(bookmark) รับอ็อบเจ็กต์ Bookmark, Remove(bookmarkName) รับชื่อของมัน, และ RemoveAt(index) รับตำแหน่งในคอลเลกชัน — ทั้งสามจะลบบุ๊กมาร์กเดียว, ในขณะที่ Clear() จะลบทุกบุ๊กมาร์กในคอลเลกชัน.
API Reference สรุป
| คลาส / เมธอด | คำอธิบาย |
|---|---|
Bookmark | แสดงถึงบุ๊กมาร์คเดียว; เปิดเผย Name, Text, IsColumn, FirstColumn, LastColumn และ Remove() |
BookmarkCollection | บุ๊กมาร์กใน Range; ดัชนีโดยชื่อ, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | โหนดเอกสารที่ทำเครื่องหมายขอบเขตของบุ๊กมาร์ก; เชื่อมกลับผ่าน Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | คืนค่า BookmarkCollection สำหรับช่วงที่กำหนด, รวมถึง doc.Range.Bookmarks สำหรับทั้งเอกสาร |
DocumentBuilder.StartBookmark() / EndBookmark() | ห่อหุ้มเนื้อหาที่แทรกไว้ในบุ๊กมาร์กที่มีชื่อ |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | ทำเครื่องหมายช่วงของคอลัมน์ตารางเป็นที่คั่นหน้า |
DocumentBuilder.MoveToBookmark() | กำหนดตำแหน่งเคอร์เซอร์ของผู้สร้างให้อยู่ที่ที่คั่นหน้าที่มีอยู่ |