如何在没有“段落”对象的情况下更改MS Word表格中单元格文本的对齐方式

问题描述 投票:0回答:1

我有一个MS Word“模板”文件,我打开,使用各种来源的新数据进行修改,然后另存为新文件。我在模板文档中有多个表格,这些表格都是相应的样式,包括表格单元格中的居中文本。

熟悉python-docx模块后,我可以通过为cell.text分配新值来轻松更改表的数据。但是,每当我为cell.text分配一个新值时,新数据不再居中,而是左对齐。

我浏览了几个类似的问题,但所有答案似乎都涉及修改段落对象。 This帖子很有帮助,提供了一个快速的POC,但也没有处理cells,而是添加paragraphs到表。然而,看到paragraph对象具有alignment属性是有帮助的。

# Example table
table = doc.add_table(rows=0, cols=2)
row = table.add_row().cells

p=row[0].add_paragraph('center justified text')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER

p.alignment
>>> 1

对于我目前的情况,我注意到cells没有alignment属性。然后我尝试修改段落对象,但没有任何改变。

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
doc = Document(BASE_DOC)

# test table, row, and cell
table = doc.tables[1]
row = table.rows[4]
cells = row.cells
cells[0].alignment
>>> AttributeError: '_Cell' object has no attribute 'alignment'

# attempt to modify paragraph alignment in table cells
for col in table.columns:
    for cell in col.cells:
        for par in cell.paragraphs:
            par.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.save(NEW_DOC)

python python-docx
1个回答
0
投票

分配给_Cell.text是一种将单元格内容设置为已知状态的方便而紧凑的方法。为此,_Cell.text从单元格中删除所有内容,然后添加一个包含单个运行的段落,其中包含您指定的文本。

因为运行和段落格式是它格式化的运行或段落的一部分,所以当您分配给_Cell.text时,所有运行格式和所有段落格式都会消失。这是“设置为已知状态”位的一部分。

如果在分配给_Cell.text后应用段落居中,您将看到它在输出中反映出来。

或者,您可以避免分配给_Cell.text并导航现有段落并自行运行。

© www.soinside.com 2019 - 2024. All rights reserved.