Робота з таблицями
Робота з таблицями
Таблиці в Aspose.Words FOSS для .NET представлені Aspose.Words.Tables простір імен: Table, Row, і Cell утворюють трирівневу складену ієрархію вузлів, яка розташована в дереві документа поряд з абзацами. Ця сторінка охоплює створення таблиць за допомогою DocumentBuilder, форматування рядків і клітинок, керування загальним макетом таблиці та об’єднанням клітинок.
Модель об’єктів таблиці
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 Підсумок
| Клас / Перелічення | Опис |
|---|---|
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 | Конструювання таблиці на основі курсора |