Làm việc với Bảng
Làm việc với Bảng
Bảng trong Aspose.Words FOSS cho .NET được biểu diễn bởi Aspose.Words.Tables không gian tên: Table, Row, và Cell tạo thành một hệ thống node hợp thành ba cấp độ, nằm trong cây tài liệu cùng với các đoạn văn. Trang này đề cập đến việc xây dựng bảng với DocumentBuilder, định dạng các hàng và ô, kiểm soát bố cục toàn bảng, và hợp nhất các ô.
Mô hình Đối tượng Bảng
Một Table là một CompositeNode chứa các nút Row, và mỗi Row là một CompositeNode chứa các nút Cell; một Cell lại chứa các đoạn văn và, có thể, các bảng lồng nhau. Table.Rows trả về một RowCollection, Row.Cells trả về một CellCollection, và một Body hoặc Story khác hiển thị mọi bảng cấp cao nhất trong nó thông qua thuộc tính Tables, một TableCollection. Ba bộ sưu tập này đều hỗ trợ Add(), Insert(), Remove(), RemoveAt(), Contains(), và IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum(), và Cell.EnsureMinimum() mỗi cái điền vào nội dung hợp lệ nhỏ nhất mà một nút loại đó cần (một hàng trống, một ô trống, hoặc một đoạn văn trống, tương ứng) sau khi các chỉnh sửa bằng chương trình để lại một nút không có nội dung.
Xây dựng Bảng với DocumentBuilder
DocumentBuilder.StartTable() bắt đầu một bảng mới tại con trỏ, InsertCell() thêm một ô vào hàng hiện tại, EndRow() đóng hàng hiện tại, và EndTable() đóng bảng. Đặt DocumentBuilder.CellFormat và DocumentBuilder.RowFormat trước khi gọi InsertCell() hoặc EndRow() để áp dụng định dạng mặc định cho các ô và hàng khi chúng được tạo – các thuộc tính này hoạt động như một mẫu cho nội dung mà trình xây dựng sẽ chèn tiếp theo, không phải là một thay đổi hồi tố cho các ô đã có trong tài liệu.
Định dạng Ô và Hàng
Cell.CellFormat là một thể hiện CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) với ClearFormatting() để đặt lại nó và SetPaddings() để thiết lập đồng thời bốn khoảng đệm ô. Row.RowFormat là một thể hiện RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) có ClearFormatting() riêng của nó.
Định dạng toàn bảng và AutoFit
Table tự nó tiết lộ các thuộc tính bố cục – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, và siêu dữ liệu khả năng truy cập thông qua Title và Description. Table.AutoFit(AutoFitBehavior) thay đổi kích thước bảng và các ô của nó theo hành vi được cung cấp. SetBorder() đặt một phía viền và SetBorders() đặt mọi viền thành cùng một kiểu đường, độ rộng và màu sắc trên toàn bảng; ClearBorders() và ClearShading() đặt lại chúng. ConvertToHorizontallyMergedCells() chuyển các ô đã được hợp nhất bằng cách khớp độ rộng thành các ô được đánh dấu rõ ràng bằng HorizontalMerge.
Chiều rộng ưu tiên và chiều rộng ô
PreferredWidth đại diện cho một độ rộng và đơn vị của nó, được tạo bằng các phương thức nhà máy tĩnh PreferredWidth.FromPercent() hoặc PreferredWidth.FromPoints(); PreferredWidthType xác định loại giá trị nào (Auto, Percent, hoặc Points) một PreferredWidth cụ thể giữ. Cả Table.PreferredWidth và CellFormat.PreferredWidth đều chấp nhận các giá trị này.
Các ô hợp nhất
CellFormat.HorizontalMerge và CellFormat.VerticalMerge (CellMerge) đánh dấu cách một ô tham gia vào việc hợp nhất ngang hoặc dọc với các ô lân cận. CellVerticalAlignment kiểm soát cách nội dung được căn chỉnh theo chiều dọc trong một ô, độc lập với bất kỳ trạng thái hợp nhất nào.
Mẹo và Thực tiễn Tốt nhất
- Đóng mỗi
StartTable()bằng mộtEndRow()tương ứng cho mỗi hàng và mộtEndTable()cuối cùng – một hàng hoặc bảng chưa đóng sẽ làm cho trạng thái nội bộ của trình xây dựng (và cây tài liệu kết quả) bị sai cấu trúc. - Đặt
DocumentBuilder.CellFormatvàDocumentBuilder.RowFormattrước mỗi lần gọiInsertCell()hoặcEndRow()nếu các hàng hoặc ô khác nhau trong cùng một bảng cần định dạng khác nhau; trình xây dựng sẽ áp dụng những gì đang được đặt tại thời điểm chèn. - Gọi
Table.EnsureMinimum(),Row.EnsureMinimum(), hoặcCell.EnsureMinimum()sau khi xóa nội dung bằng chương trình để nút giữ cấu trúc tối thiểu hợp lệ mà Word mong đợi. - Sử dụng
PreferredWidth.FromPercent()cho các bảng cần thích ứng với chiều rộng trang có sẵn, vàPreferredWidth.FromPoints()cho chiều rộng bố cục cố định. AutoFitBehaviorđược áp dụng khi bạn gọiTable.AutoFit()– nó không tự động chạy lại liên tục khi bạn thêm hoặc xóa nội dung, vì vậy hãy gọi lại sau các chỉnh sửa đáng kể nếu bạn cần bảng được điều chỉnh lại.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Cách khắc phục |
|---|---|---|
| Bảng bị sai dạng hoặc gây lỗi khi lưu | Một hàng hoặc bảng chưa bao giờ được đóng bằng EndRow() / EndTable() | Luôn ghép StartTable() với EndTable() cuối cùng, và đóng mọi hàng bằng EndRow() |
| Các ô mới không nhận được định dạng tôi đã đặt | CellFormat / RowFormat đã được thay đổi trên trình tạo sau khi các ô đã được chèn | Đặt DocumentBuilder.CellFormat / RowFormat trước khi gọi InsertCell() / EndRow() cho nội dung đó |
| Bảng không thay đổi kích thước theo cách tôi mong đợi sau khi chỉnh sửa | AutoFit() phản ánh trạng thái của bảng tại thời điểm nó được gọi, không liên tục | Gọi Table.AutoFit(AutoFitBehavior) lại sau khi thực hiện các chỉnh sửa cấu trúc |
| Các ô liền kề trông như đã hợp nhất nhưng lại hoạt động như các ô riêng biệt | Các ô chỉ được khớp theo chiều rộng, không được gắn cờ bằng CellMerge | Gọi Table.ConvertToHorizontallyMergedCells(), hoặc đặt CellFormat.HorizontalMerge / VerticalMerge một cách rõ ràng |
FAQ
Làm thế nào để tôi tạo một bảng từ đầu bằng DocumentBuilder?
Gọi StartTable(), sau đó InsertCell() cho mỗi ô trong một hàng, EndRow() để đóng hàng, lặp lại cho các hàng bổ sung, và cuối cùng EndTable() để đóng bảng.
Làm thế nào để đặt độ rộng bảng dựa trên phần trăm thay vì độ rộng cố định?
Gán Table.PreferredWidth = PreferredWidth.FromPercent(value) thay vì PreferredWidth.FromPoints(value).
Làm thế nào để đặt lại tất cả định dạng trên một ô hoặc một hàng?
Gọi CellFormat.ClearFormatting() trên CellFormat của một ô, hoặc RowFormat.ClearFormatting() trên RowFormat của một hàng.
Làm thế nào để thiết lập viền và tô bóng cho toàn bộ bảng cùng một lúc?
Sử dụng Table.SetBorders() để có viền đồng nhất ở mọi phía, Table.SetBorder() để thiết lập từng phía một, và Table.SetShading() để tô bóng đồng nhất; ClearBorders() và ClearShading() để đặt lại chúng.
API Reference Tóm tắt
| Lớp / Enum | Mô tả |
|---|---|
Table | Nút bảng; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Nút hàng bảng; Cells, RowFormat, EnsureMinimum() |
Cell | Nút ô bảng; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Các bộ sưu tập đã định kiểu của các nút Table / Row / Cell |
CellFormat | Định dạng theo ô: viền, tô bóng, lề, trạng thái hợp nhất, căn dọc |
RowFormat | Định dạng theo hàng: viền, chiều cao, hành vi ngắt trang |
PreferredWidth / PreferredWidthType | Giá trị độ rộng của bảng hoặc ô và đơn vị của nó (auto, percent, points) |
AutoFitBehavior | Cách Table.AutoFit() thay đổi kích thước bảng và các ô của nó |
CellMerge / CellVerticalAlignment | Trạng thái hợp nhất ô theo chiều ngang/dọc và căn chỉnh nội dung theo chiều dọc |
TableAlignment / TableStyleOptions / TextWrapping | Căn chỉnh toàn bảng, áp dụng kiểu dáng và hành vi ngắt dòng văn bản |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Xây dựng bảng dựa trên con trỏ |