You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用python-pptx获取文本框内文字的字体颜色?

解决python-pptx读取字体颜色报错的问题

首先,报错原因是当字体颜色未明确设置(比如继承主题颜色、使用自动颜色)时,font.color会是_NoneColor类型,该类型没有rgb属性,直接访问就会触发错误。另外你的代码仅处理了特定形状类型,且只取第一个段落,容易遗漏不同文本片段的颜色设置。

修正后的代码如下:

from pptx.enum.dml import MSO_COLOR_TYPE

for shape in slide.shapes:
    if not shape.has_text_frame:
        continue
    # 遍历文本框内的每个段落
    for paragraph in shape.text_frame.paragraphs:
        # 遍历段落里的每个文本片段(同一段落中不同文字可能有不同格式)
        for run in paragraph.runs:
            font_color = None
            # 先判断颜色类型,再做对应处理
            if run.font.color.type == MSO_COLOR_TYPE.RGB:
                font_color = run.font.color.rgb
            elif run.font.color.type == MSO_COLOR_TYPE.SCHEME:
                # 若为主题颜色,可获取对应的主题颜色枚举值,比如ACCENT_1、TITLE等
                font_color = run.font.color.theme_color
            # 自动颜色等其他类型可根据需求补充处理逻辑
            print(f"文本内容: {run.text}, 字体颜色: {font_color}")

关键说明:

  • 必须先通过run.font.color.type判断颜色类型,再针对性访问属性,避免直接调用rgb引发报错。
  • 要遍历到run层级:PPT的文本格式是按文本片段(run)划分的,同一段落内不同文字可能有不同颜色,仅取段落的字体设置会忽略片段级的格式差异。
  • 主题颜色处理:如果字体使用的是PPT内置主题颜色,可通过theme_color获取对应的枚举值,便于识别主题色类型。

内容的提问来源于stack exchange,提问作者user22480312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:22:04