Python-docx - 使用一个命令合并 table 的行或列中的所有单元格(或列中的特定单元格子集)

Python-docx - merge ALL cells in a row or column of a table (or a specific subset of cells in a column) with one command

我正在使用 python-docx 以编程方式在 word 文档中生成一个非常大且混乱的 table。

如何,作为美化过程的一部分,我需要将特定行或列中的所有单元格合并在一起。

当我事先知道行或列中有多少个单元格时,合并是微不足道的。以下 MVP:

from docx import Document
doc = Document()

#adding table of details with 4 columns
tableOverview = doc.add_table(rows=1, cols=4)
tableOverview.style = 'Table Grid'

#add some text in a first cell of a row
row = tableOverview.row_cells(0)
row[0].text = "Job details"

#merge all 4 cells in a row into one
merge1 = row[0].merge(row[1]).merge(row[2]).merge(row[3])

但是:

快速检查文档没有产生任何好的示例,通常情况下一次只有两个单元格被合并。有什么合理的方法可以将整个单元格列表合并在一起吗?

谢谢!

您只需要向 _Cell.merge() 提供您要合并的矩形对角线上的单元格即可。

因此,例如,如果您想在 9 x 9 table 中合并左上角的 3 x 3 单元格区域,您可以使用:

table.cell(0, 0).merge(table.cell(2, 2))

或者,更详细但可能更有启发性:

top_left = table.cell(0, 0)
bottom_right = table.cell(2, 2)
top_left.merge(bottom_right)

所以您需要做的就是获取对任意两个对角角的引用。注意:

bottom_right.merge(top_left)

与另一个方向一样有效。就此而言:

top_right = table.cell(0, 2)
bottom_left = table.cell(2, 0)
bottom_left.merge(top_right)

也同样有效。任何两个对角“角”单元格都可用于定义合并单元格。