如何使用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
相关产品推荐
相关产品推荐

