Об'ємні клітини таблиці
Іноді деякі ряди в таблиці вимагають заголовка або великі блоки тексту, які займають повну ширину таблиці. Для належного оформлення таблиці користувач може об’єднати кілька клітин таблиці в одну. 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
Щоб об’єднати клітинки в таблиці, створеному з 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 не використовується, наприклад, в існуючому столі, злиття клітин в попередньому вигляді може бути не так просто. Замість цього ми можемо обгорнути основні операції, які беруть участь у застосуванні об’єднувальних властивостей до клітин в методі, що робить завдання набагато простіше. Цей метод схожий на метод автоматизації Merge, який називається об’єднання діапазону клітин в таблиці.
Введіть номер мобільного, який Ви вказали при укладаннi договору з банком - для ідентифікації. У цьому випадку діапазон може пропускати декілька рядків або стовпців:
# 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() |