Sloučit stolní buňky
Někdy některé řádky v tabulce vyžadují nadpis nebo velké bloky textu, které zabírají celou šířku tabulky. Pro řádný návrh tabulky může uživatel sloučit několik stolních buněk do jedné. Aspose.Words podporuje sloučené buňky při práci se všemi vstupními formáty, včetně importu HTML obsahu.
Jak sloučit stolní buňky
In Aspose.Words, sloučené buňky jsou zastoupeny následujícími vlastnostmi: CellFormat třída:
- HorizontalMerge která popisuje, zda je buňka součástí horizontálního sloučení buněk
- VerticalMerge která popisuje, zda je buňka součástí vertikálního sloučení buněk
Hodnoty těchto vlastností určují slučovací chování buněk:
- První buňka v řadě sloučených buněk bude mít CellMerge.First
- Všechny následně sloučené buňky budou mít CellMerge.Previous
- Buňka, která není sloučena, bude mít CellMerge.None
Zkontrolujte, zda je buňka Merged
Chcete-li zjistit, zda je buňka součástí sekvence sloučených buněk, stačí zkontrolovat HorizontalMerge a VerticalMerge vlastnosti.
Následující příklad kódu ukazuje, jak tisknout horizontální a vertikální typ sloučení buňky:
# 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())) |
Sloučit stolní buňky při použití dokumentu
Sloučit buňky v tabulce vytvořené s DocumentBuilder, Musíte nastavit vhodný typ sloučení pro každou buňku, kde se očekává sloučení, nejprve CellMerge.First a pak CellMerge.Previous.
Také, musíte nezapomeňte vyčistit nastavení sloučení pro ty buňky, kde není požadováno sloučení to lze provést nastavením první ne-sloučit buňky na CellMerge.None. Pokud tomu tak není, všechny buňky v tabulce budou sloučeny.
Následující příklad kódu ukazuje, jak vytvořit tabulku se dvěma řádky, kde jsou buňky v prvním řádku sloučeny vodorovně:
# 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") |
Následující příklad kódu ukazuje, jak vytvořit tabulku dvou sloupců, kde jsou buňky v prvním sloupci vertikálně sloučeny:
# 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") |
Sloučit stolní buňky v jiných případech
V jiných situacích, kdy DocumentBuilder není používán, jako například ve stávající tabulce, slučování buněk předchozí cestou nemusí být tak snadné. Místo toho můžeme zabalit základní operace, které se podílejí na aplikaci slučovacích vlastností na buňky metodou, která tento úkol mnohem usnadňuje. Tato metoda je podobná metodě automatizace Sloučení, která se volá ke sloučení řady buněk v tabulce.
Níže uvedený kód sloučí buňky tabulky ve stanoveném rozsahu, počínaje danou buňkou a končí na konci buňky. V tomto případě může rozsah rozdělit více řádků nebo sloupců:
# 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 | |
Následující příklad kódu ukazuje, jak sloučit rozsah buněk mezi dvěma specifikovanými buňkami:
# 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") |
V závislosti na verzi rámce, kterou používáte, můžete tuto metodu zpřesnit přeměnou na metodu rozšíření. V tomto případě můžete tuto metodu nazvat přímo na buňce, abyste sloučili řadu buněk, například cell1.Merge(cell2)
.
Převést na horizontálně Promísené buňky
Někdy není možné zjistit, které buňky jsou sloučeny, protože některé novější verze Microsoft Word již nepoužívat vlajky sloučení, když jsou buňky sloučeny horizontálně. Ale pro situace, kdy jsou buňky sloučeny do buňky horizontálně podle jejich šířky pomocí flagů spojení, Aspose.Words poskytuje ConvertToHorizontallyMergedCells
metoda přeměny buněk. Tato metoda jednoduše transformuje tabulku a přidává nové buňky podle potřeby.
Následující příklad kódu ukazuje výše uvedenou metodu v provozu:
# 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() |