python-doxc表单元格对齐添加新行

时间:2019-01-18 05:47:08

标签: python python-docx

我想在使用 python-docx 创建的 Word 文档的表格单元格中右对齐文本。我遵循了this advice,但问题是在decell文本之前添加了新行,因此垂直对齐方式被破坏了。

这是没有正确对齐设置的代码:

table = document.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells

hdr_cells[0].width = Inches(0.1)
hdr_cells[1].width = Inches(10)
hdr_cells[2].width = Inches(1)
hdr_cells[3].width = Inches(1)

for entry in context['invoices']['entries']:
    row_cells = table.add_row().cells
    row_cells[0].text = str(entry['amount'])
    row_cells[1].text = entry['line']
    row_cells[2].text = entry['unit_price_label']
    row_cells[3].text = entry['subtotal']

这是结果文件: enter image description here

这是具有正确对齐设置的代码:

table = document.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells

hdr_cells[0].width = Inches(0.1)
hdr_cells[1].width = Inches(10)
hdr_cells[2].width = Inches(1)
hdr_cells[3].width = Inches(1)

for entry in context['invoices']['entries']:
    row_cells = table.add_row().cells
    row_cells[0].text = str(entry['amount'])
    row_cells[1].text = entry['line']
    row_cells[2].add_paragraph(entry['unit_price_label']).alignment = WD_ALIGN_PARAGRAPH.RIGHT
    row_cells[3].add_paragraph(entry['subtotal']).alignment = WD_ALIGN_PARAGRAPH.RIGHT

以及生成的文档:

enter image description here

使用 python-docx 将表单元格右对齐时,有什么方法可以避免这种回车吗?

1 个答案:

答案 0 :(得分:1)

简短的回答:是的,使用

row_cells[0].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT

表格单元格必须始终至少包含一个段落;这是ISO 29500规范所规定的(一旦您深入研究它就很有意义)。

根据此要求,一个新的(且为空)单元格包含一个空段落。如果在一个空单元格上调用.add_paragraph(),那么您将得到两个段落。

因此,避免使用多余段落的秘诀是从使用现有段落开始。仅在需要多个段落的情况下,才调用.add_paragraph()

单个现有段落的访问权限为cell.paragraphs[0],并且可以与python-docx中的任何其他段落相同的方式进行操作