使用python docx的Word表格单元格背景色

使用python docx的Word表格单元格背景色,python,xml,ms-word,python-docx,Python,Xml,Ms Word,Python Docx,我有一个简单的word文档,其中一个表包含一行和两列(换句话说,两个单元格)。第一个单元格的背景色为红色,另一个单元格的背景色为黑色。我想使用pythondocx将两者都更改为白色 我尝试过几种方法,但最有希望的方法是下面的方法。它修改底层xml import docx from docx.oxml.ns import nsdecls from docx.oxml import parse_xml # Set a cell background (shading) color to RGB D

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

我尝试过几种方法,但最有希望的方法是下面的方法。它修改底层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')
问题是,现在第一个单元格仍然是红色,第二个单元格现在是白色。它似乎只是在修改最后一个单元格


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

最好的办法是探索实际的XML,看看您要修改什么。OpenXML模式非常复杂,Word在编辑过程中做了您可能无法预料的所有事情
\u tc.getchildren()[0]
只获取作为子元素的第一行内容,我不确定它是否是一个无条件地准备接受
元素的
tcPr
元素。另外,如果已经有一个
w:shd
元素,您希望更新它,而不是添加一个新元素

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


如果您将找到的XML发布到那里,我可以帮助您解决问题。

谢谢-我今天就试试看能找到什么。我找到东西后再报告。
cell2 = table.cell(0,1)
testchild2 = cell2._tc.getchildren()[0]
testchild2.append(shading_elm)