使用python-docx创建不等列宽表格失败,求正确实现方法
解决python-docx表格行内列宽不一致的问题
你当前的代码无法实现需求,核心原因是python-docx中表格的列宽度是全局统一的,单个单元格设置宽度会被列的全局设置覆盖,且同一列的所有单元格宽度必须相同。要实现第一行两列(3cm、12cm),第二行两列(7.5cm、7.5cm)的表格,需要通过单元格合并来实现,具体步骤如下:
实现代码
from docx import Document from docx.shared import Cm doc = Document() # 创建2行10列的表格(每列宽度1.5cm,总宽度15cm,匹配两种行的总宽度) table = doc.add_table(rows=2, cols=10) table.style = 'Table Grid' table.autofit = False # 关闭自动调整,确保自定义宽度生效 # 设置每列基础宽度为1.5cm for col in table.columns: col.width = Cm(1.5) # 第一行:合并前2列(2*1.5=3cm),合并后8列(8*1.5=12cm) table.cell(0, 0).merge(table.cell(0, 1)) table.cell(0, 2).merge(table.cell(0, 9)) # 第二行:合并前5列(5*1.5=7.5cm),合并后5列(5*1.5=7.5cm) table.cell(1, 0).merge(table.cell(1, 4)) table.cell(1, 5).merge(table.cell(1, 9)) # 测试内容(可选) table.cell(0, 0).text = "3cm" table.cell(0, 2).text = "12cm" table.cell(1, 0).text = "7.5cm" table.cell(1, 5).text = "7.5cm" doc.save("custom_table.docx")
关键说明
- 必须关闭
autofit:Word默认会自动调整列宽,设置table.autofit = False才能让自定义宽度生效。 - 基础列拆分逻辑:用总宽度的公约数拆分列数(15cm的公约数选1.5cm,对应10列),再通过合并单元格实现不同行的列宽比例。
- 总宽度统一:确保两种行的列宽总和一致(3+12=15、7.5+7.5=15),避免表格宽度混乱。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

