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()กำหนดตำแหน่งเคอร์เซอร์ของผู้สร้างให้อยู่ที่ที่คั่นหน้าที่มีอยู่

ดูเพิ่มเติม

 ภาษาไทย