当python docx返回none时,在MS Word中获取文本的实际颜色



我正在使用python docx包来处理一些MS Word文档。我需要弄清楚一些文字的颜色。要做到这一点,你可以在段落中循环,在段落内循环,然后抓取color = run.font.color.rgb问题是有时(通常(这是None

我在github上发现了这篇帖子,并得到了@scanny的回复,我认为他管理着这个包:https://github.com/python-openxml/python-docx/issues/139在这篇文章中,他说颜色可以从风格中继承。

我有兴趣了解继承路径。我知道如何看待color = run.style.font.color.rgbcolor = paragraph.style.font.rgb

有时这些样式没有关联的颜色,但当我将运行和段落样式的名称与文档关联的样式迭代器中的样式进行比较时:

for style in doc.styles:
if style.name == run.style.name:
color = style.font.color.rgb

这里有时会露出颜色。。。你也可以用paragraph.style.name来代替run。

但有一些文件,即使在所有这些地方寻找了一种颜色,我仍然到处都找不到。在一个这样的文档中,有一个名为Default的样式,它有一个关联的颜色。所有其他样式都继承了Default样式的颜色吗?如果是,这是一个唯一的名称吗?我怎么知道哪些样式继承了其他样式的颜色?

我不能100%确定这是否可行,但理论上它应该可以解决您面临的问题。来自python-docx文档:

  1. CharacterStyle类具有属性base_stylefont
  2. 由于base_style对象指向另一个CharacterStyle实例(或None(;嵌套的";查询,直到找到font颜色

它看起来像:

style = run.style
while style:
if style.font.color.rgb:
color = style.font.color.rgb
break
else:
style = style.base_style

最新更新