如何在没有 "paragraph" 对象的情况下更改 MS Word table 中单元格文本的对齐方式

How to change alignment of cell text in MS Word table without "paragraph" object

我有一个 MS Word "template" 文件,我正在打开它,使用来自不同来源的新数据进行修改,然后另存为一个新文件。我在模板文档中有多个 table 样式适当,包括 table 单元格内的居中文本。

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

我浏览了几个类似的问题,但所有答案似乎都涉及修改段落对象。 post 很有帮助并提供了一个快速的 POC,但也没有处理 cells,而是将 paragraphs 添加到 table。但是,看到 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)

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

因为 运行 和段落格式是 运行 或它格式化的段落的 部分 ,所以所有 运行 格式和所有段落格式都会消失当您分配给 _Cell.text 时。这是 "setting to known state" 位的一部分。

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

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