Объединить ячейки таблицы

Иногда для определенных строк в таблице требуется заголовок или большие блоки текста, занимающие всю ширину таблицы. Для правильного оформления таблицы пользователь может объединить несколько ячеек таблицы в одну. Aspose.Words поддерживает объединение ячеек при работе со всеми форматами ввода, включая импорт содержимого HTML.

Как объединить ячейки таблицы

В Aspose.Words объединенные ячейки представлены следующими свойствами класса CellFormat:

  • HorizontalMerge, который описывает, является ли ячейка частью горизонтального слияния ячеек
  • VerticalMerge, который описывает, является ли ячейка частью вертикального объединения ячеек

Значения этих свойств определяют поведение ячеек при слиянии:

  • Первая ячейка в последовательности объединенных ячеек будет иметь CellMerge.First
  • Все последующие объединенные ячейки будут иметь CellMerge.Previous
  • Ячейка, которая не была объединена, будет иметь CellMerge.None

Проверьте, объединена ли ячейка

Чтобы проверить, является ли ячейка частью последовательности объединенных ячеек, мы просто проверяем свойства HorizontalMerge и VerticalMerge.

В следующем примере кода показано, как напечатать тип слияния горизонтальных и вертикальных ячеек:

Объединенные ячейки в таблице

Чтобы объединить ячейки в таблице, созданной с помощью DocumentBuilder, вам необходимо задать соответствующий тип слияния для каждой ячейки, в которой ожидается слияние – сначала CellMerge.First, а затем CellMerge.Previous.

Кроме того, вы должны помнить, что для тех ячеек, где слияние не требуется, необходимо отменить настройку слияния – это можно сделать, установив для первой ячейки, не подлежащей слиянию, значение CellMerge.None. Если этого не сделать, все ячейки в таблице будут объединены.

В следующем примере кода показано, как создать таблицу с двумя строками, в которой ячейки в первой строке объединяются по горизонтали:

В следующем примере кода показано, как создать таблицу с двумя столбцами, в которой ячейки в первом столбце объединяются по вертикали:

Объединяйте ячейки таблицы в других случаях

В других ситуациях, когда DocumentBuilder не используется, например, в существующей таблице, объединение ячеек предыдущим способом может оказаться не таким простым. Вместо этого мы можем обернуть основные операции, связанные с применением свойств объединения к ячейкам, в метод, который значительно упрощает задачу. Этот метод аналогичен методу автоматизации слияния, который вызывается для объединения диапазона ячеек в таблице.

Приведенный ниже код объединит ячейки таблицы в указанном диапазоне, начиная с указанной ячейки и заканчивая конечной ячейкой. В этом случае диапазон может охватывать несколько строк или столбцов:

В следующем примере кода показано, как объединить диапазон ячеек между двумя указанными ячейками:

В зависимости от используемой версии платформы, вы можете захотеть усовершенствовать этот метод, превратив его в метод расширения. В этом случае вы можете вызвать этот метод непосредственно для ячейки, чтобы объединить диапазон ячеек, например cell1.Merge(cell2).

Объединенные по вертикали и горизонтали ячейки в таблице

Как мы уже говорили в предыдущих статьях, таблица в Microsoft Word представляет собой набор независимых строк. Каждая строка содержит набор ячеек, которые не зависят от ячеек других строк. Таким образом, в таблице Microsoft Word нет такого объекта, как “столбец”, а “1-й столбец” - это что-то вроде “набора 1-х ячеек каждой строки таблицы”. Это позволяет пользователям иметь таблицу, в которой, например, 1–я строка состоит из двух ячеек - 2 см и 1 см, а 2-я строка состоит из двух разных ячеек – 1 см и 2 см шириной. И Aspose.Words поддерживает эту концепцию таблиц.

Таблица в HTML имеет принципиально иную структуру: в каждой строке одинаковое количество ячеек и (это важно для задачи) каждая ячейка имеет ширину соответствующего столбца, одинаковую для всех ячеек в одном столбце. Поэтому, если HorizontalMerge и VerticalMerge возвращают неверное значение, используйте следующий пример кода:

Преобразовать в горизонтально объединенные ячейки

Иногда невозможно определить, какие ячейки объединены, потому что в некоторых новых версиях Microsoft Word больше не используются флаги объединения при объединении ячеек по горизонтали. Но для ситуаций, когда ячейки объединяются в ячейку по горизонтали по ширине с помощью флагов объединения, в Aspose.Words предусмотрен метод ConvertToHorizontallyMergedCells для преобразования ячеек. Этот метод просто преобразует таблицу и добавляет новые ячейки по мере необходимости.

Следующий пример кода показывает описанный выше метод в действии: