Робота з таблицями

Робота з таблицями

Робота з таблицями

Таблиці в 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Конструювання таблиці на основі курсора

Дивіться також

 Українська