如何在python-pptx中获取Scheme类型ColorFormat对象的RGB值?
获取Scheme类型ColorFormat对象的RGB值
当ColorFormat对象的type为MSO_COLOR_TYPE.SCHEME时,它指向的是幻灯片主题的预设配色方案,并非直接存储RGB值,因此直接调用.rgb会抛出AttributeError。要获取这类颜色的实际RGB值,需要通过主题配色方案关联查询:
- 第一步:获取当前颜色对应的配色方案索引,通过
color.scheme_color属性,它会返回一个MSO_SCHEME_COLOR枚举值(例如MSO_SCHEME_COLOR.ACCENT1)。 - 第二步:获取目标幻灯片的主题配色方案,使用
slide.theme.color_scheme(该属性会自动关联幻灯片实际使用的配色方案,包括自定义版式或修改后的主题)。 - 第三步:从配色方案中提取对应索引的颜色对象,该对象具备
.rgb属性可直接读取值。
代码示例
from pptx import Presentation from pptx.enum.dml import MSO_COLOR_TYPE, MSO_SCHEME_COLOR # 加载演示文稿 prs = Presentation("your_file.pptx") # 定位到目标文本运行对象 target_run = prs.slides[0].shapes[0].text_frame.paragraphs[0].runs[0] color = target_run.color if color.type == MSO_COLOR_TYPE.SCHEME: # 获取配色方案枚举值 scheme_enum = color.scheme_color # 获取幻灯片的主题配色方案 color_scheme = prs.slides[0].theme.color_scheme # 动态获取对应配色方案中的颜色对象 scheme_color_obj = getattr(color_scheme, scheme_enum.name.lower()) # 读取RGB值 rgb = scheme_color_obj.rgb print(f"RGB值: {rgb}") else: # 非Scheme类型直接读取RGB rgb = color.rgb print(f"RGB值: {rgb}")
说明
color_scheme对象的属性名称与MSO_SCHEME_COLOR枚举值的小写名称一一对应(例如MSO_SCHEME_COLOR.DARK1对应color_scheme.dark1),因此使用getattr可以灵活适配所有配色方案索引。
内容的提问来源于stack exchange,提问作者wonton
相关产品推荐
相关产品推荐

