我有一个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)
分配给_Cell.text
是一种将单元格内容设置为已知状态的方便而紧凑的方法。为此,_Cell.text
从单元格中删除所有内容,然后添加一个包含单个运行的段落,其中包含您指定的文本。
因为运行和段落格式是它格式化的运行或段落的一部分,所以当您分配给_Cell.text
时,所有运行格式和所有段落格式都会消失。这是“设置为已知状态”位的一部分。
如果在分配给_Cell.text
后应用段落居中,您将看到它在输出中反映出来。
或者,您可以避免分配给_Cell.text
并导航现有段落并自行运行。