0

我有一个简单的 word 文档,其中包含一个包含一行和两列(换句话说,两个单元格)的表格。第一个单元格的背景颜色是红色,另一个是黑色。我想使用 python-docx 将两者都更改为白色。

我尝试了几种方法,但似乎最有希望的一种方法如下。它修改底层的xml。

import docx
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml

# Set a cell background (shading) color to RGB D9D9D9. 
shading_elm = parse_xml(r'<w:shd {} w:fill="FFFFFF"/>'.format(nsdecls('w')))

doc = docx.Document('assets/tabletest.docx')
table = doc.tables[0]

cell = table.cell(0,0)
testchild = cell._tc.getchildren()[0]
testchild.append(shading_elm)

doc.save('assets/tabletest2.docx')

上面的代码将第一个单元格修改为白色,并将第二个单元格保留为黑色。我尝试通过在以下代码之前添加以下代码来修改第二个单元格doc.save

cell2 = table.cell(0,1)
testchild2 = cell2._tc.getchildren()[0]
testchild2.append(shading_elm)

问题是现在,第一个单元格仍然是红色的,而第二个单元格现在是白色的。它似乎只是在修改最后一个单元格。

我肯定遗漏了一些东西,但我不是 xml 专家。有人有想法吗?

4

1 回答 1

0

最好的办法是探索实际的 XML 以查看您要修改的内容。OpenXML Schema 相当复杂,Word 在编辑过程中会做各种您可能不会想到的事情。_tc.getchildren()[0]只是得到小时候排在第一位的东西,我不确定它是否无条件地tcPr准备好接受一个<w:shd>元素。此外,如果那里已经有一个w:shd元素,您想要更新它,而不是添加一个新元素。

我建议使用 opc-diag 浏览您正在使用的 .docx 包的 document.xml 部分。如果您从文档中删除其他内容,将更容易找到您想要的内容。

如果您将在那里找到的 XML 发布,我可以帮助您确定该怎么做。

于 2015-06-30T00:23:21.663 回答