Сливане на таблици клетки

Понякога някои редове в таблица изискват заглавие или големи блокове от текст, които заемат пълната ширина на таблицата. За правилното проектиране на масата, потребителят може да слее няколко клетки на масата в една. Aspose.Words поддържа слетите клетки при работа с всички входни формати, включително внос на HTML съдържание.

Как да се сливат клетки маса

В Aspose.Words, Слетите клетки са представени от следните свойства на CellFormat клас:

  • HorizontalMerge което описва дали клетката е част от хоризонтално сливане на клетки
  • VerticalMerge което описва дали клетката е част от вертикално сливане на клетки

Стойностите на тези свойства определят сливането на поведението на клетките:

  • Първата клетка в поредица от слети клетки ще има CellMerge.First
  • Всички впоследствие слети клетки ще имат CellMerge.Previous
  • Клетка, която не се слива ще има CellMerge.None

Проверете дали клетката е разбъркана

За да проверим дали клетката е част от поредица от слети клетки, просто проверяваме HorizontalMerge както и VerticalMerge имоти.

Следният пример за код показва как да отпечатате типа хоризонтално и вертикално сливане на клетки:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Table with merged cells.docx")
table = doc.get_child(aw.NodeType.TABLE, 0, True).as_table()
for row in table.rows:
for cell in row.as_row().cells:
print(self.print_cell_merge_type(cell.as_cell()))

Сливане на таблици клетки при използване на документ строител

Сливане на клетките в таблица, създадена с DocumentBuilder, трябва да зададете подходящия тип сливане за всяка клетка, където сливането се очаква. CellMerge.First и тогава CellMerge.Previous.

Също така, не трябва да забравяте да изчистите настройката за сливане за тези клетки, където не се изисква сливане. CellMerge.None. Ако това не се направи, всички клетки в таблицата ще бъдат обединени.

Следният пример за код показва как да се създаде таблица с два реда, където клетките в първия ред се сливат хоризонтално:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_cell()
builder.cell_format.horizontal_merge = aw.tables.CellMerge.FIRST
builder.write("Text in merged cells.")
builder.insert_cell()
# This cell is merged to the previous and should be empty.
builder.cell_format.horizontal_merge = aw.tables.CellMerge.PREVIOUS
builder.end_row()
builder.insert_cell()
builder.cell_format.horizontal_merge = aw.tables.CellMerge.NONE
builder.write("Text in one cell.")
builder.insert_cell()
builder.write("Text in another cell.")
builder.end_row()
builder.end_table()
doc.save(ARTIFACTS_DIR + "WorkingWithTables.horizontal_merge.docx")

Следният пример за код показва как да се създаде таблица с две колони, в която клетките в първата колона се сливат вертикално:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_cell()
builder.cell_format.vertical_merge = aw.tables.CellMerge.FIRST
builder.write("Text in merged cells.")
builder.insert_cell()
builder.cell_format.vertical_merge = aw.tables.CellMerge.NONE
builder.write("Text in one cell")
builder.end_row()
builder.insert_cell()
# This cell is vertically merged to the cell above and should be empty.
builder.cell_format.vertical_merge = aw.tables.CellMerge.PREVIOUS
builder.insert_cell()
builder.cell_format.vertical_merge = aw.tables.CellMerge.NONE
builder.write("Text in another cell")
builder.end_row()
builder.end_table()
doc.save(ARTIFACTS_DIR + "WorkingWithTables.vertical_merge.docx")

Сливане на таблици клетки в други случаи

В други ситуации, когато DocumentBuilder не се използва, като например в съществуваща таблица, сливането на клетките по предишния начин може да не е толкова лесно. Вместо това можем да увием основните операции, свързани с прилагането на сливащи се свойства към клетките в метод, който улеснява задачата. Този метод е подобен на метода за сливане на автоматизация, който се нарича сливане на набор от клетки в таблица.

Кодът по-долу ще слее клетките на таблицата в определения диапазон, като се започне от дадена клетка и завършва в крайната клетка. В този случай обхватът може да обхваща няколко реда или колони:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
@staticmethod
def merge_cells(start_cell: aw.tables.Cell, end_cell: aw.tables.Cell):
parent_table = start_cell.parent_row.parent_table
# Find the row and cell indices for the start and end cell.
start_cell_pos = drawing.Point(start_cell.parent_row.index_of(start_cell), parent_table.index_of(start_cell.parent_row))
end_cell_pos = drawing.Point(end_cell.parent_row.index_of(end_cell), parent_table.index_of(end_cell.parent_row))
# Create a range of cells to be merged based on these indices.
# Inverse each index if the end cell is before the start cell.
merge_range = drawing.Rectangle(
min(start_cell_pos.x, end_cell_pos.x),
min(start_cell_pos.y, end_cell_pos.y),
abs(end_cell_pos.x - start_cell_pos.x) + 1,
abs(end_cell_pos.y - start_cell_pos.y) + 1)
for row in parent_table.rows:
row = row.as_row()
for cell in row.cells:
cell = cell.as_cell()
current_pos = drawing.Point(row.index_of(cell), parent_table.index_of(row))
# Check if the current cell is inside our merge range, then merge it.
if merge_range.contains(current_pos):
cell.cell_format.horizontal_merge = aw.tables.CellMerge.FIRST if current_pos.x == merge_range.x else aw.tables.CellMerge.PREVIOUS
cell.cell_format.vertical_merge = aw.tables.CellMerge.FIRST if current_pos.y == merge_range.y else aw.tables.CellMerge.PREVIOUS
view raw merge-cells.py hosted with ❤ by GitHub

Следният пример за код показва как да се слее набор от клетки между две определени клетки:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Table with merged cells.docx")
table = doc.first_section.body.tables[0]
# We want to merge the range of cells found inbetween these two cells.
cell_start_range = table.rows[0].cells[0]
cell_end_range = table.rows[1].cells[1]
# Merge all the cells between the two specified cells into one.
self.merge_cells(cell_start_range, cell_end_range)
doc.save(ARTIFACTS_DIR + "WorkingWithTables.merge_cell_range.docx")

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

Конвертиране хоризонтално Разделени клетки

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

Следният пример с код показва гореспоменатия метод в действие:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Table with merged cells.docx")
table = doc.first_section.body.tables[0]
# Now merged cells have appropriate merge flags.
table.convert_to_horizontally_merged_cells()