Python-docx,如何在表格中设置单元格宽度?

新手上路,请多包涵

如何在表格中设置单元格宽度?,到目前为止我得到:

 from docx import Document
from docx.shared import Cm, Inches

document = Document()
table = document.add_table(rows=2, cols=2)
table.style = 'TableGrid' #single lines in all cells
table.autofit = False

col = table.columns[0]
col.width=Inches(0.5)
#col.width=Cm(1.0)
#col.width=360000 #=1cm

document.save('test.docx')

无论我在 col.width 中设置什么数字或单位,它的宽度都不会改变。

原文由 girdeux 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

简短回答:单独设置单元格宽度。

 for cell in table.columns[0].cells:
    cell.width = Inches(0.5)

python-docx 设置列宽时按照您的指示进行操作。问题是 Word 会忽略它。其他客户端,如 LibreOffice,遵守列宽设置。

.docx 文件为 XML 格式(因此文件扩展名中有“x”后缀)。表格的 XML 词汇表有一个列宽位置和一个单元格宽度位置。说到这个细节谁注意有点烦。一个共同点是每个人都尊重在单个单元格级别设置的明确宽度。这对我来说意义不大,但这就是让它发挥作用所需要的。在你的程序中有一个函数来处理细节可能是有意义的:

 def set_col_widths(table):
    widths = (Inches(1), Inches(2), Inches(1.5))
    for row in table.rows:
        for idx, width in enumerate(widths):
            row.cells[idx].width = width

如果您的表格合并了单元格,这会变得有点复杂,这实际上可能是 Word 忽略列宽的原因;在某些合并单元格的情况下,它们是模棱两可的。

原文由 scanny 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于 LibreOffice,我必须设置:

 table.autofit = False
table.allow_autofit = False

接下来,设置给定的列和单元格宽度

table.columns[0].width = Inches(1.0)
table.rows[0].cells[0].width = Inches(1.0)

原文由 Konrad Grzyb 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题