每个 PPTX 文件包含一个主题文件:
ppt/theme/theme1.xml
其中定义了 12 种主题颜色:
| 名称 | 含义 |
|---|---|
bg1 |
Background 1 |
tx1 |
Text 1 |
bg2 |
Background 2 |
tx2 |
Text 2 |
accent1 |
强调色 1 |
accent2 |
强调色 2 |
accent3 |
强调色 3 |
accent4 |
强调色 4 |
accent5 |
强调色 5 |
accent6 |
强调色 6 |
hlink |
超链接颜色 |
folHlink |
访问过的超链接 |
accent6 就是 PPT 主题的第六个强调色。
不同模板 RGB 会不同。
🔍 如何获取 accent6 的 RGB 颜色?
Python-pptx 不支持直接取 theme 色的 RGB,需要解析 XML:
代码:读取主题颜色(精准版)
from pptx import Presentation
from lxml import etree
def get_theme_colors(ppt_path):
prs = Presentation(ppt_path)
theme_part = prs.part.theme.part
xml = etree.fromstring(theme_part.blob)
ns = {"a": "http://schemas.openxmlformats.org/drawingml/2006/main"}
colors = {}
scheme_clrs = xml.xpath("//a:themeElements/a:clrScheme/*", namespaces=ns)
for clr in scheme_clrs:
name = clr.tag.split("}")[-1] # accent1, accent2...
rgb = None
srgbClr = clr.find("a:srgbClr", ns)
if srgbClr is not None:
rgb = srgbClr.get("val")
colors[name] = rgb
return colors
print(get_theme_colors("你的PPT路径.pptx"))
返回示例:
{
'accent1': '4472C4',
'accent6': '70AD47',
'bg1': 'FFFFFF',
...
}