ทำงานกับตาราง
ทำงานกับตาราง
ตารางใน Aspose.Words FOSS สำหรับ .NET จะถูกแทนด้วย Aspose.Words.Tables เนมสเปซ: Table, Row, และ Cell สร้างลำดับชั้นโหนดเชิงประกอบระดับสามที่อยู่ในต้นไม้เอกสารเคียงกับย่อหน้า หน้านี้ครอบคลุมการสร้างตารางด้วย DocumentBuilder, การจัดรูปแบบแถวและเซลล์, การควบคุมการจัดวางตารางทั้งหมด, และการรวมเซลล์.
โมเดลวัตถุตาราง
A Table คือ CompositeNode ที่มีโหนด Row, และแต่ละ Row คือ CompositeNode ที่มีโหนด Cell; Cell อีกด้านหนึ่งมีย่อหน้าและอาจมีตารางซ้อนกัน Table.Rows คืนค่า RowCollection, Row.Cells คืนค่า CellCollection, และ Body หรือ Story อื่น ๆ จะเปิดเผยตารางระดับบนทั้งหมดในนั้นผ่านคุณสมบัติ Tables ของมัน, ซึ่งคือ TableCollection. ทั้งสามคอลเลกชันสนับสนุน Add(), Insert(), Remove(), RemoveAt(), Contains(), และ IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum(), และ Cell.EnsureMinimum() แต่ละรายการเติมเนื้อหาที่ถูกต้องที่เล็กที่สุดที่โหนดประเภทนั้นต้องการ (แถวว่าง, เซลล์ว่าง, หรือย่อหน้าว่าง, ตามลำดับ) หลังจากการแก้ไขโดยโปรแกรมทำให้ไม่มีมัน.
สร้างตารางด้วย DocumentBuilder
DocumentBuilder.StartTable() เริ่มตารางใหม่ที่ตำแหน่งเคอร์เซอร์, InsertCell() เพิ่มเซลล์ในแถวปัจจุบัน, EndRow() ปิดแถวปัจจุบัน, และ EndTable() ปิดตาราง. ตั้งค่า DocumentBuilder.CellFormat และ DocumentBuilder.RowFormat ก่อนเรียก InsertCell() หรือ EndRow() เพื่อใช้การจัดรูปแบบเริ่มต้นกับเซลล์และแถวเมื่อสร้าง – คุณสมบัติเหล่านี้ทำหน้าที่เป็นแม่แบบสำหรับเนื้อหาที่ผู้สร้างจะใส่ต่อไป, ไม่ใช่การเปลี่ยนแปลงย้อนหลังต่อเซลล์ที่มีอยู่ในเอกสาร.
การจัดรูปแบบเซลล์และแถว
Cell.CellFormat เป็นอินสแตนซ์ของ CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) ที่มี ClearFormatting() เพื่อรีเซ็ตและ SetPaddings() เพื่อกำหนดค่าการเว้นระยะของเซลล์สี่ด้านพร้อมกัน. Row.RowFormat เป็นอินสแตนซ์ของ RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) ที่มี ClearFormatting() ของตนเอง.
การจัดรูปแบบทั่วทั้งตารางและ AutoFit
Table เองเปิดเผยคุณสมบัติการจัดวาง – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, และเมตาดาต้าการเข้าถึงผ่าน Title และ Description. Table.AutoFit(AutoFitBehavior) ปรับขนาดตารางและเซลล์ตามพฤติกรรมที่กำหนด. SetBorder() ตั้งค่าขอบด้านเดียวและ SetBorders() ตั้งค่าขอบทั้งหมดให้มีสไตล์เส้น ความกว้าง และสีเดียวกันทั่วทั้งตาราง; ClearBorders() และ ClearShading() รีเซ็ตค่าดังกล่าว. ConvertToHorizontallyMergedCells() แปลงเซลล์ที่ถูกผสานโดยความกว้างที่ตรงกันให้เป็นเซลล์ที่ถูกทำเครื่องหมายอย่างชัดเจนด้วย HorizontalMerge.
ความกว้างที่ต้องการและความกว้างของเซลล์
PreferredWidth แทนความกว้างและหน่วยของมัน ซึ่งสร้างด้วยเมธอดแฟกทอรีแบบสแตติก PreferredWidth.FromPercent() หรือ PreferredWidth.FromPoints(); PreferredWidthType ระบุว่าค่าชนิดใด (Auto, Percent, หรือ Points) ที่ PreferredWidth ที่กำหนดไว้ถืออยู่. ทั้ง Table.PreferredWidth และ CellFormat.PreferredWidth ยอมรับค่าที่เหล่านี้.
เซลล์ที่ผสานกัน
CellFormat.HorizontalMerge และ CellFormat.VerticalMerge (CellMerge) ระบุว่าตารางเซลล์มีส่วนร่วมในการผสานแนวนอนหรือแนวตั้งกับเซลล์ข้างเคียงอย่างไร. CellVerticalAlignment ควบคุมการจัดแนวเนื้อหาในเซลล์ในแนวตั้งโดยอิสระจากสถานะการผสานใด ๆ.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ปิดทุก
StartTable()ด้วยEndRow()ที่ตรงกันในแต่ละแถวและEndTable()สุดท้าย – แถวหรือ ตารางที่ไม่ได้ปิดจะทำให้สถานะภายในของตัวสร้าง (และโครงสร้างต้นไม้ของเอกสารที่ได้) ผิดรูปแบบ. - กำหนด
DocumentBuilder.CellFormatและDocumentBuilder.RowFormatก่อนการเรียกInsertCell()หรือEndRow()ทุกครั้ง หากแถวหรือเซลล์ที่ต่างกันในตารางเดียวต้องการรูปแบบที่ต่างกัน; ตัวสร้างจะนำค่าที่ตั้งไว้ในขณะนั้นไปใช้เมื่อแทรก. - เรียกใช้
Table.EnsureMinimum(),Row.EnsureMinimum()หรือCell.EnsureMinimum()หลังจากลบเนื้อหาโดยโปรแกรม เพื่อให้โหนดยังคงโครงสร้างที่ถูกต้องตามขั้นต่ำที่ Word คาดหวัง. - ใช้
PreferredWidth.FromPercent()สำหรับตารางที่ควรปรับให้เข้ากับความกว้างของหน้าที่มีอยู่, และใช้PreferredWidth.FromPoints()สำหรับความกว้างแบบคงที่. AutoFitBehaviorจะถูกใช้เมื่อคุณเรียกTable.AutoFit()– มันไม่ได้ทำงานต่อเนื่องเมื่อคุณเพิ่มหรือเอาเนื้อหาออก, ดังนั้นให้เรียกอีกครั้งหลังการแก้ไขที่สำคัญหากต้องการให้ตารางปรับขนาดใหม่.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| ตารางดูผิดรูปแบบหรือเกิดข้อผิดพลาดเมื่อบันทึก | แถวหรือ ตารางไม่เคยถูกปิดด้วย EndRow() / EndTable() | ควรจับคู่ StartTable() กับ EndTable() สุดท้ายเสมอ และปิดทุกแถวด้วย EndRow() |
| เซลล์ใหม่ไม่รับการจัดรูปแบบที่ฉันตั้งค่า | CellFormat / RowFormat ถูกเปลี่ยนในตัวสร้างหลังจากที่เซลล์ได้ถูกแทรกแล้ว | ตั้งค่า DocumentBuilder.CellFormat / RowFormat ก่อนเรียก InsertCell() / EndRow() สำหรับเนื้อหานั้น |
| ตารางไม่ปรับขนาดตามที่ฉันคาดหวังหลังจากแก้ไข | AutoFit() สะท้อนสถานะของตารางในขณะที่ถูกเรียกใช้, ไม่ได้ต่อเนื่อง | เรียก Table.AutoFit(AutoFitBehavior) ใหม่หลังจากการแก้ไขโครงสร้าง |
| เซลล์ที่อยู่ติดกันซึ่งดูเหมือนจะรวมกันทำงานเป็นเซลล์แยกต่างหาก | เซลล์ถูกจับคู่เฉพาะตามความกว้าง, ไม่ได้ถูกทำเครื่องหมายด้วย CellMerge | เรียก Table.ConvertToHorizontallyMergedCells(), หรือกำหนด CellFormat.HorizontalMerge / VerticalMerge อย่างชัดเจน |
FAQ
ฉันจะสร้างตารางตั้งแต่ต้นด้วย DocumentBuilder ได้อย่างไร?
เรียก StartTable(), จากนั้น InsertCell() สำหรับแต่ละเซลล์ในแถว, EndRow() เพื่อปิดแถว, ทำซ้ำสำหรับแถวเพิ่มเติม, และในที่สุด EndTable() เพื่อปิดตาราง.
ฉันจะตั้งความกว้างของตารางเป็นเปอร์เซ็นต์แทนความกว้างคงที่ได้อย่างไร?
กำหนด Table.PreferredWidth = PreferredWidth.FromPercent(value) แทน PreferredWidth.FromPoints(value).
ฉันจะรีเซ็ตการจัดรูปแบบทั้งหมดในเซลล์หรือแถวได้อย่างไร?
เรียก CellFormat.ClearFormatting() บน CellFormat ของเซลล์, หรือ RowFormat.ClearFormatting() บน RowFormat ของแถว.
ฉันจะตั้งขอบและการเงาให้กับตารางทั้งหมดพร้อมกันได้อย่างไร?
ใช้ Table.SetBorders() เพื่อขอบสม่ำเสมอบนทุกด้าน, Table.SetBorder() เพื่อขอบด้านเดียวต่อครั้ง, และ Table.SetShading() เพื่อการเงาสม่ำเสม; ClearBorders() และ ClearShading() รีเซ็ตมัน.
API Reference สรุป
| คลาส / Enum | คำอธิบาย |
|---|---|
Table | โหนดตาราง; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | โหนดแถวตาราง; Cells, RowFormat, EnsureMinimum() |
Cell | โหนดเซลล์ตาราง; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | คอลเลกชันที่กำหนดประเภทของโหนด Table / Row / Cell |
CellFormat | การจัดรูปแบบต่อเซลล์: เส้นขอบ, เงา, การเว้นระยะ, สถานะการรวม, การจัดแนวแนวตั้ง |
RowFormat | การจัดรูปแบบต่อแถว: เส้นขอบ, ความสูง, พฤติกรรมการตัดหน้า |
PreferredWidth / PreferredWidthType | ค่าความกว้างของตารางหรือเซลล์และหน่วยของมัน (auto, percent, points) |
AutoFitBehavior | วิธีที่ Table.AutoFit() ปรับขนาดตารางและเซลล์ของมัน |
CellMerge / CellVerticalAlignment | สถานะการรวมเซลล์แนวนอน/แนวตั้งและการจัดแนวเนื้อหาแนวตั้ง |
TableAlignment / TableStyleOptions / TextWrapping | การจัดแนวทั่วตาราง, การใช้สไตล์, และพฤติกรรมการตัดบรรทัดข้อความ |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | การสร้างตารางโดยใช้เคอร์เซอร์ |