Ячейка, охватывающая несколько столбцов в таблице с использованием python-docx

Я пытаюсь создать такую ​​таблицу, используя модуль python-docx.

Пример таблицы, которую я хочу  создать

Работая с примером кода для создания таблицы в example-makedocument.py и читая код в docx.py, я подумал, что что-то похожее на это сработает:

tbl_rows = [ ['A1'], 
       ['B1', 'B2' ],
       ['C1', 'C2' ] ]
tbl_colw = [ [100],
       [25, 75],
       [25, 75] ]
tbl_cwunit = 'pct'

body.append(table(tbl_rows, colw=tbl_colw, cwunit=tbl_cwunit))

однако это повреждает документ docx, и когда Word восстанавливает документ, таблица отображается следующим образом:

Фактическая таблица создана

Как я могу заставить строку правильно охватывать несколько столбцов с помощью python-docx?


person Diarmaid    schedule 28.03.2013    source источник
comment
Я не знаю в Python, но в C # вам нужно предоставить TableCell экземпляр GridSpan. РЕДАКТИРОВАТЬ: глядя на исходный код, не похоже, что вы можете сделать это с помощью python-docx.   -  person jn1kk    schedule 29.03.2013
comment
Спасибо за вклад. Я разрабатываю, как это сделать напрямую, используя lxml, скоро я смогу добавить ответ.   -  person Diarmaid    schedule 29.03.2013
comment
В последнее время не успел поработать (другие приоритеты). Я сделаю здесь обновление, если мне удастся избавиться от него.   -  person Diarmaid    schedule 10.06.2013


Ответы (1)


Я добавил функцию merge_cells () к классу строк python-docx, которая может объединять любые ячейки в одной строке. Я надеюсь, что он будет включен в python-docx. А пока вы можете получить его из моей ветки github "merge_cells_feature" python-docx.

Я копирую пример, который написал в запросе на вытягивание здесь для справки. :

from docx import Document

doc = Document()
table = doc.add_table(6,6)
header_row = table.rows[0]
header_row.merge_cells()

# args can also be passed to merge_cells(mergeStart, mergeStop) in order to 
# implement any kind of merge on the same row, such as:
table.rows[1].merge_cells(0,3)  # This will merge the cells indexed from 0 to 2.
person Apteryx    schedule 04.08.2014
comment
После обсуждений с сопровождающим python-docx была сделана другая, более полная реализация. Он размещен здесь: github.com/Apteryks/python-docx/tree/cell -merge_feature. Любая ячейка таблицы теперь имеет метод «слияния», который принимает другую ячейку таблицы в качестве аргумента. Он может объединять как по горизонтали, так и по вертикали или и то, и другое. - person Apteryx; 05.10.2014
comment
Извините, это заняло так много времени, чтобы принять этот ответ. - person Diarmaid; 13.04.2015
comment
Ссылка на Github больше не действительна. - person LMc; 10.01.2017
comment
@LMc: Я, должно быть, удалил эту ветку, так как функция была объединена. Это хорошие новости, но API немного отличается, так как он может объединяться в обоих направлениях. Предположим, у вас есть таблица 3x3 и вы хотите объединить первую строку, вы можете сделать: my_table.cell(0, 0).merge(my_table.cell(0, 2)), если я правильно помню. - person Apteryx; 11.01.2017