Сливане на таблици клетки
Понякога някои редове в таблица изискват заглавие или големи блокове от текст, които заемат пълната ширина на таблицата. За правилното проектиране на масата, потребителят може да слее няколко клетки на масата в една. 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 | |
Следният пример за код показва как да се слее набор от клетки между две определени клетки:
# 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() |