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

时间:2017-03-27 16:13:30

标签: ms-word python-docx column-width

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

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中设置了多少个或多个单位,其宽度都不会改变。

4 个答案:

答案 0 :(得分:16)

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

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忽略列宽的原因;它们在某些合并单元格情况下是模棱两可的。

答案 1 :(得分:2)

docs of python_docx

allow_autofit属性默认设置为True,这意味着宽度设置不会生效,因此: table.allow_autofit = False

答案 2 :(得分: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)

答案 3 :(得分:0)

table = documento.add_table(rows=1, cols=3, style="表格网格") table.alignment = WD_ALIGN_PARAGRAPH.CENTER

        table.allow_autofit = True
        table.columns[0].width = Cm(3.5)
        table.columns[1].width = Cm(7.5)
        table.columns[2].width = Cm(5.5)