วิธีทำงานกับรายการใน .NET
วิธีทำงานกับรายการใน .NET
รายการลำดับตัวเลขและหัวข้อย่อยในเอกสาร Word ถูกสร้างจากวัตถุสามอย่างที่ทำงานร่วมกัน: List ซึ่งเป็นคำนิยามการนับเลขที่สามารถนำกลับใช้ใหม่; ListFormat ที่บอกย่อหน้าตัวใดเป็นของรายการและระดับใด; และ ListLevel ที่เก็บการจัดรูปแบบจริงสำหรับระดับหนึ่ง คู่มือฉบับนี้แสดงวิธีการนำรายการไปใช้กับย่อหน้า, ป้องกันไม่ให้รายการแยกต่างหากใช้ตัวนับร่วมกัน, ย้ายย่อหน้าระหว่างระดับ, และปรับแต่งการนับเลขและการจัดรูปแบบหัวข้อย่อยด้วย Aspose.Words FOSS สำหรับ .NET.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: นำรายการไปใช้กับย่อหน้า
ใช้ ListFormat.ApplyBulletDefault() หรือ ApplyNumberDefault() บนการจัดรูปแบบของย่อหน้าเพื่อใช้รายการหัวข้อย่อยหรือรายการลำดับเลขเริ่มต้นของ Word ด้วยคำสั่งเดียว — นี่เป็นวิธีที่เร็วที่สุดในการใช้รายการมาตรฐาน สำหรับรูปแบบที่กำหนดล่วงหน้าเฉพาะแทนค่าเริ่มต้น ให้เรียก Document.Lists (ซึ่งเป็น ListCollection) .Add(listTemplate) พร้อมค่าตัวแปร ListTemplate เช่น BulletDisk, BulletSquare, NumberArabicDot หรือ NumberUppercaseRomanDot เพื่อสร้าง List จากหนึ่งในรูปแบบที่มาพร้อมกับ Word, หรือ AddSingleLevelList(listTemplate) สำหรับรูปแบบระดับเดียว หลังจากย่อหน้ามีการจัดรูปแบบรายการแล้ว, ListFormat.IsListItem จะรายงาน true, และ ListFormat.List/ListLevelNumber จะระบุว่ารายการและระดับใดที่ถูกใช้.
ขั้นตอนที่ 2: ให้กลุ่มย่อหน้าใหม่มีการนับเลขแยกอิสระ
ย่อหน้าที่ ListFormat.List ชี้ไปที่อ็อบเจกต์ List ร่วมกันจะดำเนินการนับต่อเนื่องกัน เมื่อกลุ่มย่อหน้าใหม่ต้องการการจัดลำดับเลขที่เริ่มจาก 1 ใหม่อย่างอิสระ ให้เรียก ListCollection.AddCopy(srcList) เพื่อทำสำเนาการกำหนดรายการที่มีอยู่ แล้วใช้สำเนานั้นกับย่อหน้าใหม่แทนการใช้รายการต้นฉบับ ListCollection.GetListByListId(listId) ดึงรายการเฉพาะโดยใช้ ListId เมื่อคุณต้องการค้นหารายการแทนการสร้างใหม่ และ Count รายงานจำนวนรายการที่เอกสารมีอยู่ในขณะนี้.
ขั้นตอนที่ 3: ย้ายย่อหน้าระหว่างระดับรายการ
ใช้ ListFormat.ListIndent() เพื่อย้ายย่อหน้าไปหนึ่งระดับลึกลงในรายการ, และ ListOutdent() เพื่อย้ายขึ้นหนึ่งระดับ — การทำงานเดียวกันที่ Word ทำเมื่อกด Tab และ Shift+Tab ที่จุดเริ่มต้นของย่อหน้ารายการ ควรใช้วิธีเหล่านี้แทนการตั้งค่า ListLevelNumber โดยตรง เพราะจะทำให้รูปแบบรายการของย่อหน้าสอดคล้องกันภายใน เรียก RemoveNumbers() เพื่อลบรูปแบบรายการออกจากย่อหน้าโดยสมบูรณ์.
ขั้นตอนที่ 4: ปรับแต่งรูปแบบการลำดับเลขของระดับรายการ
เข้าถึงระดับเฉพาะผ่าน List.ListLevels (ซึ่งเป็น ListLevelCollection) จากนั้นตั้งค่า ListLevel.NumberStyle (ค่าของ NumberStyle เช่น Arabic, UppercaseRoman, LowercaseLetter หรือ Bullet) และ NumberFormat — สตริงรูปแบบที่รวมตัวเลขกับข้อความตามตัวอักษรเช่น จุดหรือวงเล็บ — ร่วมกัน เนื่องจากคู่ที่ไม่ตรงกันจะทำให้การแสดงผลผิดพลาด StartAt ตั้งค่าตัวเลขเริ่มต้นของระดับ, และ RestartAfterLevel ควบคุมว่าการเพิ่มของระดับที่สูงกว่าใดจะทำให้ตัวนับของระดับนี้รีสตาร์ท — ให้ตั้งค่าอย่างชัดเจนในรายการที่ซ้อนกันแทนพึ่งพาพฤติกรรมรีสตาร์ทเริ่มต้น Alignment (Left, Center, Right) และ TrailingCharacter (Tab, Space, Nothing) ควบคุมตำแหน่งป้ายและตัวคั่นระหว่างป้ายกับข้อความย่อหน้า พร้อมกับ TabPosition, NumberPosition, และ TextPosition สำหรับการจัดวางที่แม่นยำ IsLegal บังคับให้ใช้การนับแบบกฎหมาย (เลขอารบิกตลอด) ไม่ว่า NumberStyle จะเป็นอย่างไร.
ขั้นตอนที่ 5: เพิ่มรูปภาพเป็นสัญลักษณ์หัวข้อในระดับรายการ
เรียก ListLevel.CreatePictureBullet() บนระดับเป้าหมายเพื่อสร้างการกำหนดสัญลักษณ์หัวข้อรูปภาพ, จากนั้นระบุ ImageData ของสัญลักษณ์ก่อนที่จะลบการจัดรูปแบบสัญลักษณ์ข้อความที่มีอยู่ในระดับเดียวกัน เรียก DeletePictureBullet() เพื่อลบสัญลักษณ์หัวข้อรูปภาพและกลับไปใช้การจัดรูปแบบสัญลักษณ์ข้อความ.
ขั้นตอนที่ 6: ตรวจสอบป้ายแสดงผลของรายการ
ListLabel อธิบายป้ายกำกับที่แสดงผลจริงสำหรับรายการหนึ่งรายการที่สร้างจากการจัดรูปแบบย่อหน้าของรายการนั้น LabelString คือข้อความตัวอักษรที่ Word แสดง — เช่น “3.” หรือ “•” — LabelValue คือค่าตัวเลขพื้นฐาน, และ Font คือการจัดรูปแบบของป้ายกำกับเอง, แยกจากการจัดรูปแบบของข้อความย่อหน้า สำหรับการคำนวณค่าของป้ายกำกับในตำแหน่งใด ๆ ของลำดับโดยไม่ต้องแสดงรายการทั้งหมด, ให้เรียก ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat).
ปัญหาทั่วไปและการแก้ไข
ย่อหน้าสองย่อหน้าที่ควรนับเลขแยกกันยังคงต่อเนื่องในลำดับเดียวกัน. ย่อหน้าทั้งสอง’ ListFormat.List อ้างถึงสิ่งที่แชร์ร่วมกัน List วัตถุ ให้กลุ่มที่สองของคุณมีรายการของตนเองผ่าน ListCollection.AddCopy(srcList) แทนการใช้ซ้ำเดียวกัน List.
สตริงรูปแบบการนับเลขที่กำหนดเองไม่แสดงผลตามที่คาดหวัง. ListLevel.NumberFormat ไม่ตรงกับรูปแบบที่คาดหวังสำหรับระดับของ NumberStyle. ตรวจสอบ NumberFormat and NumberStyle ถูกตั้งค่าอย่างสม่ำเสมอสำหรับระดับที่กำลังแก้ไข.
การเยื้องของรายการดูผิดพลาดหลังจากเปลี่ยนระดับโดยอัตโนมัติ. ListLevelNumber ถูกตั้งค่าโดยตรงโดยไม่อัปเดตคุณสมบัติตำแหน่งที่เกี่ยวข้อง. ใช้ ListFormat.ListIndent()/ListOutdent() แทนการตั้งค่า ListLevelNumber โดยตรง.
สัญลักษณ์หัวข้อแบบรูปภาพไม่ปรากฏบนระดับ. ไม่มีสัญลักษณ์หัวข้อแบบรูปภาพถูกสร้างสำหรับระดับนั้น หรือรูปแบบข้อความหัวข้อเริ่มต้นยังทำงานอยู่. เรียก ListLevel.CreatePictureBullet() และจัดหาข้อมูลรูปภาพก่อนลบรูปแบบข้อความหัวข้อ.
รายการที่เชื่อมโยงสไตล์จะไม่ตอบสนองต่อการเปลี่ยนแปลงการจัดรูปแบบโดยตรง. Check List.IsListStyleReference — การจัดรูปแบบของรายการที่อ้างอิงสไตล์จะถูกควบคุมโดยการเชื่อมโยงของมัน Style (ผ่าน List.Style), ไม่ได้โดยการแก้ไขรายการโดยตรง. เปรียบเทียบกับ IsListStyleDefinition เพื่อแยกแยะรายการที่กำหนดการจัดรูปแบบของตนเอง.
คำถามที่พบบ่อย
ความแตกต่างระหว่าง List และ ListFormat คืออะไร?
List คือการกำหนดหมายเลขหรือสัญลักษณ์หัวข้อที่ใช้ซ้ำได้และแชร์ระหว่างย่อหน้า ListFormat เป็นแบบต่อย่อหน้า — มันชี้ไปที่ List ที่ย่อหน้านั้นใช้และระดับใด ผ่าน ListFormat.List และ ListLevelNumber.
ฉันจะตรวจสอบว่าย่อหน้าเป็นส่วนหนึ่งของรายการแล้วหรือยัง?
อ่าน ListFormat.IsListItem เกี่ยวกับรูปแบบของย่อหน้า หาก true ListFormat.List และ ListLevelNumber ระบุว่ารายการและระดับใดที่มันเป็นส่วนหนึ่ง.
ฉันจะทำให้รายการใหม่เริ่มนับจาก 1 โดยไม่ขึ้นกับรายการที่มีอยู่ได้อย่างไร?
ใช้ ListCollection.AddCopy(srcList) เพื่อสร้างสำเนาอิสระของการกำหนดรายการ จากนั้นนำสำเนานั้นไปใช้กับย่อหน้าใหม่แทนการใช้ List ดั้งเดิมซึ่งจะทำให้ตัวนับต่อเนื่องกัน.
ฉันจะสร้างรายการแบบหัวข้อสัญลักษณ์หรือหมายเลขจากศูนย์ได้อย่างไร?
ใช้ ListFormat.ApplyBulletDefault() หรือ ApplyNumberDefault() สำหรับการจัดรูปแบบเริ่มต้นของ Word, หรือ ListCollection.Add(listTemplate) พร้อมค่าของ ListTemplate เพื่อเริ่มจากรูปแบบที่กำหนดไว้ล่วงหน้าและปรับแต่ง List.ListLevels จากนั้น.
ฉันจะทำให้รูปแบบตัวเลขเป็นแบบ “1)” แทน “1.” ได้อย่างไร?
ตั้งค่า ListLevel.NumberFormat ในระดับที่เกี่ยวข้องเป็นสตริงรูปแบบที่ต้องการ, พร้อมกับ NumberStyle สำหรับสไตล์ตัวเลขเอง.