Làm việc với Bảng

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ột EndRow() tương ứng cho mỗi hàng và một EndTable() 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.CellFormat và DocumentBuilder.RowFormat trước mỗi lần gọi InsertCell() hoặc EndRow() 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ặc Cell.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ọi Table.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ânCách khắc phục
Bảng bị sai dạng hoặc gây lỗi khi lưuMộ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 đã đặtCellFormat / 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ửaAutoFit() 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ụcGọ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ệtCác ô chỉ được khớp theo chiều rộng, không được gắn cờ bằng CellMergeGọ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 / EnumMô tả
TableNút bảng; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowNút hàng bảng; Cells, RowFormat, EnsureMinimum()
CellNút ô bảng; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionCá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 / PreferredWidthTypeGiá trị độ rộng của bảng hoặc ô và đơn vị của nó (auto, percent, points)
AutoFitBehaviorCách Table.AutoFit() thay đổi kích thước bảng và các ô của nó
CellMerge / CellVerticalAlignmentTrạ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 / TextWrappingCă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 / EndTableXây dựng bảng dựa trên con trỏ

Xem thêm

 Tiếng Việt