Як працювати з таблицями у .NET
Цей посібник показує, як програмно створювати, форматувати та читати таблиці у Aspose.Words FOSS для .NET, використовуючи Table, Row, і Cell класи у Aspose.Words.Tables простір імен разом з DocumentBuilder. Він охоплює створення таблиці з нуля, форматування клітинок та рядків під час побудови, керування розміткою таблиці в цілому та AutoFit, встановлення бажаних ширин, об’єднання клітинок та читання вже наявних таблиць у завантаженому документі.
Покроковий посібник
Крок 1: Встановити пакет
Aspose.Words FOSS for .NET ще не публікує пакет NuGet — замість цього зберіть бібліотеку з вихідного коду. Клонуйте https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, потім зберіть Aspose.Words.sln у конфігурації Release за допомогою SDK .NET і підключіть отриману збірку Aspose.Words у вашому проєкті. Бібліотека орієнтована на .NET Standard 2.0, тому працює на .NET Framework 4.6.2+ та .NET 6/8/10.
Крок 2: Імпортувати необхідні класи
Додайте директиву using Aspose.Words; для основних класів документу (Document, DocumentBuilder) та директиву using Aspose.Words.Tables; для класів, специфічних для таблиць, які розглядаються в цьому посібнику — Table, Row, Cell, CellFormat, RowFormat, PreferredWidth та пов’язані перерахування.
Крок 3: Створити нову таблицю за допомогою DocumentBuilder
Створіть Document і DocumentBuilder, прив’язані до нього, потім викличте DocumentBuilder.StartTable(), щоб розпочати таблицю в позиції курсора. Для кожної клітинки в рядку викликайте DocumentBuilder.InsertCell(), потім закрийте рядок за допомогою DocumentBuilder.EndRow(). Повторюйте стільки рядків, скільки потрібна таблиця, і закрийте всю таблицю за допомогою DocumentBuilder.EndTable(). Кожен StartTable() потребує відповідного EndTable(), і кожен рядок потребує відповідного EndRow(), інакше внутрішній стан будівника — і отримане дерево документа — стануть пошкодженими.
Крок 4: Форматуйте клітинки та рядки під час створення
Встановіть DocumentBuilder.CellFormat і DocumentBuilder.RowFormat перед викликом InsertCell() або EndRow(), щоб застосувати форматування до клітинок і рядків, які будівник збирається створити — ці два параметри діють як шаблон для нового вмісту, а не як ретроспективна зміна вже вставлених клітинок. CellFormat надає доступ до Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth та чотирьох властивостей відступу (LeftPadding, RightPadding, TopPadding, BottomPadding), які можна встановити одночасно за допомогою SetPaddings(). RowFormat надає доступ до Borders, Height, HeightRule, AllowBreakAcrossPages і HeadingFormat. Викличте CellFormat.ClearFormatting() або RowFormat.ClearFormatting(), щоб скинути будь-яке з них до значень за замовчуванням перед встановленням нових значень для наступного рядка або клітинки.
Крок 5: Встановити глобальне розташування таблиці та AutoFit
Після створення таблиці встановіть властивості розташування безпосередньо в об’єкті Table: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) та TextWrapping. Викличте Table.SetBorders(), щоб застосувати один стиль, ширину та колір межі до всієї таблиці, або Table.SetBorder(), щоб встановити окрему сторону; ClearBorders() і ClearShading() скидають їх. Table.AutoFit(AutoFitBehavior) змінює розмір таблиці та її клітинок відповідно до обраної поведінки — викликайте його знову після будь-якої структурної правки, оскільки він відображає стан таблиці лише в момент виконання, а не постійно.
Крок 6: Встановити бажані та ширини клітинок
Створюйте значення ширини за допомогою статичних фабричних методів PreferredWidth.FromPercent() для розташування, яке адаптується до доступної ширини сторінки, або PreferredWidth.FromPoints() для фіксованої ширини; PreferredWidthType повідомляє, який тип значення (Auto, Percent або Points) містить даний PreferredWidth. Призначте результат або Table.PreferredWidth для всієї таблиці, або CellFormat.PreferredWidth для однієї клітинки.
Крок 7: Об’єднати комірки
Позначте комірки як об’єднані, встановивши CellFormat.HorizontalMerge або CellFormat.VerticalMerge (обидва типу CellMerge) на комірки, які мають брати участь у злитті. Якщо комірки виглядали об’єднаними лише за рахунок збігу їх ширини, а не були явно позначені, викличте Table.ConvertToHorizontallyMergedCells(), щоб перетворити це візуальне розташування у комірки зі справжнім станом CellMerge. CellVerticalAlignment керує вертикальним вирівнюванням вмісту в комірці, незалежно від будь-якого об’єднання.
Крок 8: Читання таблиць з існуючого документа
Щоб працювати з таблицями, які вже присутні у завантаженому документі, читайте Body.Tables (або властивість Tables будь-якого іншого Story) — це TableCollection — замість створення нових. Table.Rows повертає RowCollection, а Row.Cells повертає CellCollection; усі три типи колекцій підтримують Add(), Insert(), Remove(), RemoveAt(), Contains() та IndexOf() для програмних змін. Після видалення рядків або комірок викличте Table.EnsureMinimum(), Row.EnsureMinimum() або Cell.EnsureMinimum(), щоб вузол зберіг мінімальну коректну структуру, яку очікує Word — порожній рядок, порожню комірку або порожній абзац відповідно.
Типові проблеми та виправлення
Збережений документ виглядає пошкодженим, або під час збереження виникає помилка Рядок або сама таблиця ніколи не були закриті. Завжди поєднуйте DocumentBuilder.StartTable() з фінальним EndTable(), і закрийте кожен рядок EndRow() перед переходом до наступного або завершенням таблиці.
Нові клітини не успадковують форматування, яке я встановив CellFormat and RowFormat були змінені на DocumentBuilder після того, як уражені клітини вже були вставлені. Встановіть DocumentBuilder.CellFormat / RowFormat перед InsertCell() or EndRow() виклик, який створює вміст, який ви хочете відформатувати.
Таблиця не змінює розмір так, як я очікую, після того як я редагую її вміст Table.AutoFit(AutoFitBehavior) відображає структуру таблиці лише в момент виклику. Викличте її знову після будь-якої структурної правки — додавання або видалення рядків, клітинок або вмісту — якщо потрібно перепідлаштувати розмітку.
Клітинки, які виглядають об’єднаними, поводяться як окремі клітинки при зворотному читанні Клітинки були зіставлені лише за шириною, а не позначені CellMerge. Виклик Table.ConvertToHorizontallyMergedCells(), або встановити CellFormat.HorizontalMerge / VerticalMerge явно на клітинки, які слід об’єднати.
Видалення рядків або клітинок залишає таблицю в недійсному стані Word очікує, що кожен Table, Row, і Cell зберігати мінімальну дійсну структуру. Після програмного видалення вмісту викличте EnsureMinimum() на вузлі, який щойно був змінений.
Часті запитання
Як створити таблицю з нуля, а не редагувати існуючу?
Використайте DocumentBuilder: викличте StartTable(), потім InsertCell() для кожної комірки в рядку, EndRow() щоб закрити рядок, повторіть для додаткових рядків, і EndTable() щоб закрити таблицю.
Як отримати таблиці, які вже існують у завантаженому документі?
Прочитайте властивість Tables (це TableCollection) у Body розділу, який вас цікавить, або в будь-якому іншому Story, наприклад, у верхньому чи нижньому колонтитулі.
Як встановити таблицю у відсотках від ширини сторінки замість фіксованої ширини?
Призначте Table.PreferredWidth = PreferredWidth.FromPercent(value) замість PreferredWidth.FromPoints(value).
Яка різниця між встановленням границь за допомогою SetBorders та SetBorder?
Table.SetBorders() застосовує один стиль лінії, ширину та колір до всіх границь таблиці одночасно; Table.SetBorder() встановлює окрему сторону, дозволяючи різним сторонам мати різне форматування.
Як скинути форматування комірки або рядка перед їх повторним використанням?
Викличте CellFormat.ClearFormatting() на CellFormat комірки, або RowFormat.ClearFormatting() на RowFormat рядка.