วิธีทำงานกับสไตล์ใน .NET
คู่มือนี้แสดงวิธีการค้นหา, นำไปใช้, และสร้างสไตล์ของย่อหน้า, ตัวอักษร, ตาราง, และรายการใน Aspose.Words FOSS สำหรับ .NET, โดยใช้ the Style, StyleCollection, และ TableStyle คลาส. มันครอบคลุมการอ่านคอลเลกชันสไตล์ของเอกสาร, การค้นหาสไตล์อย่างเชื่อถือได้ข้ามภาษา, การนำสไตล์ไปใช้กับย่อหน้าและรัน, การสร้างและคัดลอกสไตล์, และการกำหนดค่าการจัดรูปแบบตามเงื่อนไขต่อภูมิภาคสำหรับสไตล์ของตาราง.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 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; – Style, StyleCollection, TableStyle, StyleType, StyleIdentifier, ConditionalStyle, ConditionalStyleCollection, และ ConditionalStyleType ทั้งหมดอยู่ในเนมสเปซ Aspose.Words ร่วมกับ Document.
ขั้นตอน 3: อ่านคอลเลกชันสไตล์ของเอกสาร
Document.Styles คืนค่า StyleCollection – ทุก Style ที่สร้างไว้ล่วงหน้าและที่กำหนดโดยผู้ใช้ที่แนบกับเอกสาร. StyleCollection.Count รายงานจำนวนสไตล์ที่มี, และ DefaultFont / DefaultParagraphFormat อธิบายการจัดรูปแบบเริ่มต้นของเอกสารที่เนื้อหาใหม่สืบทอดก่อนที่สไตล์ใด ๆ จะถูกนำไปใช้โดยชัดเจน.
ขั้นตอน 4: ค้นหาสไตล์อย่างเชื่อถือได้
ดึงสไตล์โดยใช้ชื่อที่แสดงของมันด้วยตัวจัดทำดัชนี StyleCollection, styles[name]. สำหรับสไตล์ที่สร้างไว้ล่วงหน้า, ควรใช้ตัวจัดทำดัชนีเดียวกันพร้อมค่า enum StyleIdentifier แทน – styles[sti] – ชื่อจะถูกแปลเป็นภาษาท้องถิ่น, แต่ค่าของ StyleIdentifier จะไม่ถูกแปล, ดังนั้นการค้นหาตามตัวระบุทำงานแบบเดียวกันไม่ว่าภาษาเอกสารจะเป็นอะไร. ตรวจสอบ Style.Aliases เพื่อดูชื่อทางเลือกที่ Word รับรู้สำหรับสไตล์เดียวกันหากตัวจัดทำดัชนีไม่พบสิ่งที่คุณคาดหวัง, และตรวจสอบ Style.BuiltIn ก่อนที่จะลบหรือเปลี่ยนชื่อสไตล์โดยโปรแกรม, เนื่องจากสไตล์ที่สร้างไว้ล่วงหน้ามักถูกอ้างอิงด้วยชื่อในส่วนอื่นของเอกสาร.
ขั้นตอน 5: ใช้สไตล์กับย่อหน้า หรือรัน
วัตถุการจัดรูปแบบที่บรรจุสไตล์จะแสดงคุณสมบัติทั้ง Style (วัตถุ Style เอง) และ StyleName (ทางลัดที่ทำการค้นหา หรือสร้างสไตล์ตามชื่อ). ตั้งค่า ParagraphFormat.Style หรือ ParagraphFormat.StyleName เพื่อใช้สไตล์ย่อหน้า, และ Font.Style หรือ Font.StyleName เพื่อใช้สไตล์อักขระกับการจัดรูปแบบของรัน. การกำหนดค่า StyleName ด้วยชื่อที่ยังไม่มีในคอลเลกชันจะสร้างสไตล์นั้น – ยืนยันว่ามีสไตล์อยู่โดยใช้ตัวจัดทำดัชนี StyleCollection ก่อน, หรือกำหนดวัตถุ Style โดยตรง, หากพฤติกรรมนั้นไม่ใช่งานที่ตั้งใจ.
ขั้นตอน 6: สร้างลำดับชั้นของสไตล์
อ่าน BaseStyleName เพื่อค้นหาสตไลที่สไตล์หนึ่งสืบทอดการจัดรูปแบบที่ไม่ได้กำหนด, LinkedStyleName สำหรับสไตล์ย่อหน้า/อักขระที่จับคู่ (ตามที่ Word กำหนดสำหรับสไตล์ที่สร้างไว้ล่วงหน้าเช่นหัวข้อและสไตล์อักขระที่เชื่อมโยง), และ NextParagraphStyleName สำหรับสไตล์ที่ Word กำหนดให้กับย่อหน้าใหม่ที่พิมพ์หลังจากย่อหน้าที่ใช้สไตล์นี้. ตั้งค่า BaseStyleName เมื่อตั้งค่าชุดสไตล์ที่เกี่ยวข้อง – เช่น กลุ่มสไตล์หัวข้อที่ควรสืบทอดการเลือกแบบอักษรทั้งหมดจากสไตล์ฐานหนึ่ง – แทนการทำซ้ำการจัดรูปแบบเดียวกันในทุกสไตล์.
ขั้นตอนที่ 7: สร้างหรือคัดลอกสไตล์
เรียก StyleCollection.Add(type, name) พร้อมกับ StyleType (Paragraph, Character, Table หรือ List) และชื่อเพื่อสร้างสไตล์ใหม่ที่ว่างเปล่า จากนั้นตั้งค่า Font และ ParagraphFormat ตามต้องการ การทำสำเนาสไตล์ที่มีอยู่แล้ว – รวมถึงสไตล์จาก Document ที่ต่างกันของ StyleCollection – ให้เรียก StyleCollection.AddCopy(style) แทนการอ่านและนำคุณสมบัติการจัดรูปแบบทุกอย่างมาปรับใช้ด้วยตนเอง เรียก Style.Remove() เพื่อลบสไตล์ออกจากคอลเลกชัน.
ขั้นตอนที่ 8: กำหนดค่ารูปแบบตารางและการจัดรูปแบบตามเงื่อนไข
TableStyle ขยาย Style ด้วยคุณสมบัติการจัดวางตาราง – Alignment, CellSpacing, LeftIndent, Shading, VerticalAlignment และคุณสมบัติการเติมช่องสี่ตัว (LeftPadding, RightPadding, TopPadding, BottomPadding) – พร้อมกับ RowStripe และ ColumnStripe ซึ่งควบคุมจำนวนแถวหรือคอลัมน์ที่รูปแบบการแถบซ้ำได้ สำหรับการจัดรูปแบบตามพื้นที่, กำหนดค่า TableStyle.ConditionalStyles – ConditionalStyleCollection ที่เก็บ ConditionalStyle หนึ่งรายการต่อพื้นที่: FirstRow, LastRow, FirstColumn, LastColumn, OddRowBanding, EvenRowBanding, OddColumnBanding, EvenColumnBanding, และสี่เซลล์มุม (TopLeftCell, TopRightCell, BottomLeftCell, BottomRightCell) แต่ละ ConditionalStyle มี Font, ParagraphFormat, Shading, Borders ของตนเองและการเติมช่องเซลล์, โดย Type รายงานว่าพื้นที่ ConditionalStyleType ใดที่มันแทน; ตั้งค่าการจัดรูปแบบบนพื้นที่เหล่านี้แทนการตั้งค่าบนแถวตารางแต่ละแถวเพื่อให้ได้การจัดรูปแบบแถบ, แถวหัวตาราง, หรือเซลล์มุมที่คงอยู่แม้แก้ไขตาราง.
ขั้นตอนที่ 9: รีเซ็ตหรือเอาการจัดรูปแบบออก
เรียก ConditionalStyle.ClearFormatting() เพื่อรีเซ็ตพื้นที่ตามเงื่อนไขหนึ่งพื้นที่, หรือ ConditionalStyleCollection.ClearFormatting() เพื่อรีเซ็ตทุกพื้นที่บน TableStyle พร้อมกัน StyleCollection.ClearQuickStyleGallery() ลบสไตล์ทั้งหมดจากแกลเลอรีสไตล์ด่วนของ UI Word โดยไม่ลบสไตล์เอง – มีประโยชน์สำหรับการลดจำนวนในแกลเลอรีโดยไม่กระทบเนื้อหาเอกสาร.
ปัญหาทั่วไปและวิธีแก้
StyleCollection ตัวชี้ดัชนีคืนค่า null สำหรับการค้นหาชื่อ ชื่อสไตล์ไม่มีอยู่ในเอกสารนี้, หรือสไตล์ที่มาพร้อมระบบยังไม่ได้ถูกใช้, ดังนั้น Word ยังไม่ได้สร้างมันขึ้นมา. ตรวจสอบ Style.Aliases สำหรับชื่อทางเลือก, หรือใช้ the StyleCollection indexer กับ a StyleIdentifier สำหรับสไตล์ในตัวแทน.
การตั้งค่า StyleName อย่างไม่คาดคิดจะสร้างสไตล์ใหม่ StyleName จะสร้างสไตล์ที่ระบุชื่อหากยังไม่มีอยู่ในคอลเลกชัน ใช้ StyleCollection indexer ก่อนเพื่อยืนยันว่าสไตล์มีอยู่ หรือกำหนด Style object โดยตรงผ่าน Style property แทนการ StyleName.
การแบ่งแถบตารางไม่ปรากฏหลังจากใช้ TableStyle บริเวณการจัดรูปแบบตามเงื่อนไข – OddRowBanding, EvenRowBanding, และลักษณะคล้ายกัน – ไม่เคยได้รับการกำหนดค่าใน TableStyle.ConditionalStyles. ตั้งค่าการจัดรูปแบบบนรายการที่เกี่ยวข้อง ConditionalStyle รายการใน ConditionalStyleCollection.
การเปลี่ยนสไตล์จะไม่ส่งผลต่อเนื้อหาที่ใช้สไตล์นั้นอยู่แล้ว การจัดรูปแบบโดยตรง (แบบแมนนวล) ที่นำไปใช้เหนือสไตล์จะมีลำดับความสำคัญสูงกว่าการตั้งค่าของสไตล์เอง. ลบการจัดรูปแบบโดยตรงบนช่วงหรือย่อหน้าที่ได้รับผลกระทบ, หรือกำหนด Style.AutomaticallyUpdate เพื่อให้สไตล์กำหนดค่าตัวเองใหม่จากการจัดรูปแบบแมนนวลนั้น.
การค้นหาสตไตล์ที่สร้างมาโดยอัตโนมัติล้มเหลวในเอกสารที่เขียนด้วยภาษาที่ต่างกัน The StyleCollection ดัชนีจะจับคู่ตามชื่อที่แสดงซึ่งได้รับการแปลภาษาที่ใช้เมื่อเรียกด้วยชื่อ ใช้ดัชนีเดียวกันพร้อมค่าที่สอดคล้องกัน StyleIdentifier ค่า enum แทน เนื่องจากตัวระบุนี้ไม่ขึ้นกับภาษาท้องถิ่น.
คำถามที่พบบ่อย
ฉันจะดึงคอลเลกชันของสไตล์ทั้งหมดในเอกสารได้อย่างไร?
อ่าน Document.Styles ซึ่งจะคืนค่า StyleCollection ที่มี Style ทั้งหมดที่เป็นสไตล์ในตัวและที่ผู้ใช้กำหนดในเอกสารนั้น.
ความแตกต่างระหว่าง Style และ StyleIdentifier คืออะไร?
Style คืออ็อบเจ็กต์สไตล์จริงพร้อมการจัดรูปแบบของมัน; StyleIdentifier คือค่าประเภท enum ที่ไม่ขึ้นกับภาษาซึ่งใช้เพื่อค้นหาสไตล์ในตัวที่สร้างขึ้นล่วงหน้าที่เฉพาะเจาะจงโดยไม่คำนึงถึงภาษาของเอกสาร ผ่านตัวดัชนี StyleCollection.
สไตล์ตารางแตกต่างจากสไตล์ย่อหน้า หรือสไตล์อักขระอย่างไร?
TableStyle เป็นคลาสย่อยของ Style ที่เพิ่มคุณสมบัติการจัดวางตาราง (Alignment, CellSpacing, padding) และคอลเลกชัน ConditionalStyles สำหรับการจัดรูปแบบเฉพาะพื้นที่ เช่น แถวแบบแถบ, แถวหัวเรื่อง, และเซลล์มุม – แนวคิดการจัดรูปแบบเหล่านี้ไม่ใช้กับสไตล์ย่อหน้า หรือสไตล์อักขระ.
ฉันสามารถสร้างสไตล์ใหม่ทั้งหมดแทนการแก้ไขสไตล์ที่มีอยู่ได้หรือไม่?
ใช่ – เรียก StyleCollection.Add(type, name) พร้อมกับ StyleType ที่ต้องการและชื่อใหม่เพื่อสร้างสไตล์เปล่า, จากนั้นตั้งค่าคุณสมบัติการจัดรูปแบบของมัน (Font, ParagraphFormat, ฯลฯ สำหรับสไตล์ย่อหน้า หรือสไตล์อักขระ).
ฉันจะทำสำเนาสไตล์อย่างไร รวมถึงจากเอกสารอื่น?
เรียก StyleCollection.AddCopy(style), ส่งผ่านอ็อบเจ็กต์ Style – ซึ่งอาจมาจาก StyleCollection ของ Document ที่แตกต่าง – เพื่อเพิ่มสำเนาของมันไปยังคอลเลกชันเป้าหมาย.