当前位置: 首页 > 知识库问答 >
问题:

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

伏砚
2023-03-14

我有一个简单的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专家。有人有想法吗?

共有1个答案

韶浩皛
2023-03-14

最好的办法是探索实际的XML,看看您要修改什么。OpenXML模式相当复杂,Word在编辑过程中做了各种您可能意想不到的事情。_tc.getchildrement()[0]只获取第一行中的任何内容作为子元素,我不确定它是否无条件地是准备接受 元素的TCPR元素。另外,如果已经有w:shd元素,您需要更新它,而不是添加新元素。

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

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

 类似资料:
  • 问题内容: 我正在尝试使用渲染器为jTable的单元格上色,但是它们工作不佳,因为它们滞后于表格并且无法看到。这是我的代码: 我没有将其放入rendererclass中,因为它滞后了,我将其放入cicle的双精度中,具体地说,放入了第二个cicle。我希望它为超过24的单元格上色,如果现在我写的话,那是行不通的 它使桌子完全着色 编辑 按照要求,我创建了一个描述我的问题的小示例,我不知道是否存在发

  • 问题内容: 我的站点读取一个XML文件,该文件包含数据表的信息(值)。我使用CSS设置表格样式,并且一切正常。 为了获得更好的用户体验,我想知道是否有可能根据其值动态更改每个单元格的背景颜色? 例如: 每个包含小于5的数字的单元格都有红色背景色; 每个大于等于“ 5”的单元格具有绿色背景色。 我对此的第一个解决方案是使用Javascript-但我想知道是否有办法仅使用CSS样式来解决此问题? 问题

  • 问题内容: 虽然默认情况下当然可以使用,但提供的选择非常有限。 我想知道如何将自己的自定义颜色添加到文档中? 问题答案: 很多选择。 也有图案颜色和阴影颜色,但是简单得多。

  • 问题内容: 我正在使用Vaadin,我想为我的表格/表格中的特定单元格设置背景色,或者如果无法为特定表格中的单元格设置背景色,我想至少为表格/表格中的特定单元格设置字体颜色。我有一个表格/表格的代码TableView如下: 表格/表格的内容类为: 如果可以将背景颜色设置为特定的单元格,或者至少设置字体颜色,并且您知道该怎么做,请写信。例如,在表格/表格中单元格的值为“ 1”的情况下,我想将其设置为

  • 我如何在Vaadin 8或更高版本中绘制网格单元。由于Vaadin 8不再支持grid.setCellStyleGenerator,我不知道还能做什么。有什么建议吗?