【问题标题】:Get actual color of text in MS Word when python-docx returns none当 python-docx 返回 none 时获取 MS Word 中文本的实际颜色
【发布时间】:2023-01-14 14:38:03
【问题描述】:

我正在使用 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 而不是运行。

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

【问题讨论】:

  • 链接到一些示例文档文件以制作 mcve 可能会有所帮助
  • 也许你应该使用另一个包版本否则检查这个answer

标签: python colors ms-word python-docx


【解决方案1】:

我不是 100% 确定这会起作用,但理论上它应该可以解决您面临的问题。来自python-docxdocumentation

  1. CharacterStyleclass有属性base_stylefont
  2. 由于base_style 对象指向另一个CharacterStyle 实例(或无),您可以进行“嵌套”查询,直到找不到font 颜色。

    它看起来像:

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

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 2017-06-18
    • 2019-04-19
    • 2020-04-10
    • 2022-01-25
    • 2011-12-29
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多