PPT 演示文稿处理技能
概述
本技能提供完整的 PowerPoint 演示文稿处理能力,包括创建、编辑和分析 .pptx 文件。
创建新演示文稿的推荐工作流程
方法一:HTML to PPTX 工作流程(推荐 - 专业设计)
这是创建专业演示文稿的最佳方法,提供完整的设计控制和视觉质量。
设计原则
关键要求 - 在编写代码前必须做:
- 分析内容主题:这个演示是关于什么的?什么行业、情绪或基调?
- 检查品牌要求:如果用户提到公司/组织,考虑其品牌色彩和身份
- 匹配调色板:选择反映主题的颜色
- 说明设计思路:在编写代码前解释你的设计选择
设计要求:
- ✅ 在编写代码前说明基于内容的设计方法
- ✅ 仅使用 Web 安全字体:Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact
- ✅ 通过大小、粗细和颜色创建清晰的视觉层次
- ✅ 确保可读性:强对比度、适当大小的文本、清晰对齐
- ✅ 保持一致:重复模式、间距和视觉语言
颜色调色板选择
创意选色建议:
- 超越默认:什么颜色真正匹配这个主题?避免自动驾驶选择
- 多角度考虑:主题、行业、情绪、能量水平、目标受众、品牌身份
- 大胆尝试:医疗演示不一定用绿色,金融不一定用深蓝
- 构建调色板:选择 3-5 种协调的颜色(主色 + 辅助色 + 强调色)
- 确保对比:文本必须在背景上清晰可读
示例调色板(激发创意 - 选择一个、改编或创建自己的):
- 经典蓝 - 深蓝 (#1C2833), 石板灰 (#2E4053), 银色 (#AAB7B8), 浅灰 (#F4F6F6)
- 青绿珊瑚 - 青色 (#5EA8A7), 深青 (#277884), 珊瑚 (#FE4447), 白色 (#FFFFFF)
- 大胆红 - 红 (#C0392B), 鲜红 (#E74C3C), 橙 (#F39C12), 黄 (#F1C40F), 绿 (#2ECC71)
- 温暖腮红 - 淡紫 (#A49393), 腮红 (#EED6D3), 玫瑰 (#E8B4B8), 奶油 (#FAF7F2)
- 勃艮第奢华 - 勃艮第 (#5D1D2E), 深红 (#951233), 锈色 (#C15937), 金色 (#997929)
- 深紫翡翠 - 紫色 (#B165FB), 深蓝 (#181B24), 翡翠 (#40695B), 白色 (#FFFFFF)
- 奶油森林绿 - 奶油 (#FFE1C7), 森林绿 (#40695B), 白色 (#FCFCFC)
- 粉紫 - 粉红 (#F8275B), 珊瑚 (#FF574A), 玫瑰 (#FF737D), 紫色 (#3D2F68)
- 柠檬李子 - 柠檬绿 (#C5DE82), 李子 (#7C3A5F), 珊瑚 (#FD8C6E), 蓝灰 (#98ACB5)
- 黑金 - 金色 (#BF9A4A), 黑色 (#000000), 奶油 (#F4F6F6)
- 鼠尾草陶土 - 鼠尾草 (#87A96B), 陶土 (#E07A5F), 奶油 (#F4F1DE), 炭灰 (#2C2C2C)
- 炭灰红 - 炭灰 (#292929), 红 (#E33737), 浅灰 (#CCCBCB)
- 活力橙 - 橙色 (#F96D00), 浅灰 (#F2F2F2), 炭灰 (#222831)
- 森林绿 - 黑 (#191A19), 绿 (#4E9F3D), 深绿 (#1E5128), 白 (#FFFFFF)
- 复古彩虹 - 紫 (#722880), 粉 (#D72D51), 橙 (#EB5C18), 琥珀 (#F08800), 金 (#DEB600)
- 复古大地 - 芥末 (#E3B448), 鼠尾草 (#CBD18F), 森林绿 (#3A6B35), 奶油 (#F4F1DE)
视觉细节选项
几何图案:
- 对角分隔线代替水平线
- 不对称列宽(30/70, 40/60, 25/75)
- 90° 或 270° 旋转文本标题
- 圆形/六边形图片框架
- 三角形强调形状
- 重叠形状增加深度
边框处理:
- 单侧粗边框(10-20pt)
- 双线边框配对比色
- 角括号代替完整框架
- L 形边框(上+左 或 下+右)
- 标题下划线(3-5pt 粗)
排版处理:
- 极端大小对比(72pt 标题 vs 11pt 正文)
- 全大写标题 + 宽字母间距
- 大号显示数字
- 等宽字体(Courier New)用于数据/统计/技术内容
- 窄字体(Arial Narrow)用于密集信息
图表数据样式:
- 单色图表 + 单一强调色突出关键数据
- 横向条形图代替纵向
- 点图代替条形图
- 最少网格线或无网格线
- 数据标签直接在元素上(无图例)
- 超大数字显示关键指标
布局创新:
- 全出血图片 + 文本叠加
- 侧边栏(20-30% 宽度)用于导航/上下文
- 模块化网格系统(3×3, 4×4 块)
- Z 型或 F 型内容流
- 浮动文本框覆盖彩色形状
- 杂志风格多栏布局
背景处理:
- 占据 40-60% 幻灯片的纯色块
- 渐变填充(仅垂直或对角)
- 分割背景(两种颜色,对角或垂直)
- 边到边色带
- 负空间作为设计元素
工作流程步骤
设计思考
- 分析内容主题和目标受众
- 选择 3-5 种颜色的调色板
- 决定视觉风格(现代/专业/科技/创意)
- 向用户说明设计思路
创建 HTML 幻灯片
- 为每张幻灯片创建 HTML 文件
- 使用标准尺寸(720pt × 405pt for 16:9)
- 使用
<h1>-<h6>, <p>, <ul>, <ol> 标签
- 应用 CSS 样式实现设计
生成 Node.js 转换脚本
- 使用 PptxGenJS 库
- 读取 HTML 并转换为 PPTX
- 添加图表、表格等高级元素
- 保存 PPTX 文件
运行生成
node generate_presentation.js
完整示例代码
HTML 幻灯片示例(slide1.html):
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
padding: 0;
width: 720pt;
height: 405pt;
background: linear-gradient(135deg, #1C2833 0%, #2E4053 100%);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: Arial, sans-serif;
}
h1 {
color: #F4F6F6;
font-size: 60pt;
font-weight: bold;
margin: 0;
text-align: center;
}
p {
color: #AAB7B8;
font-size: 24pt;
margin-top: 20pt;
}
</style>
</head>
<body>
<h1>演示标题</h1>
<p>副标题文字</p>
</body>
</html>
Node.js 转换脚本示例:
const PptxGenJS = require('pptxgenjs');
const fs = require('fs');
const puppeteer = require('puppeteer');
async function createPresentation() {
const pptx = new PptxGenJS();
// 设置演示文稿属性
pptx.layout = '16x9';
pptx.author = 'Generated by Claude';
// 为每个 HTML 文件创建幻灯片
const htmlFiles = ['slide1.html', 'slide2.html', 'slide3.html'];
for (const htmlFile of htmlFiles) {
const slide = pptx.addSlide();
// 读取 HTML 内容
const html = fs.readFileSync(htmlFile, 'utf8');
// 使用 Puppeteer 渲染 HTML 为图片
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 960, height: 540 });
await page.setContent(html);
const screenshot = await page.screenshot({ type: 'png' });
await browser.close();
// 将图片添加到幻灯片
slide.addImage({
data: `data:image/png;base64,${screenshot.toString('base64')}`,
x: 0,
y: 0,
w: '100%',
h: '100%'
});
}
// 保存演示文稿
await pptx.writeFile({ fileName: 'presentation.pptx' });
console.log('✅ 演示文稿创建成功!');
}
createPresentation().catch(console.error);
方法二:Python-PPTX 直接创建(快速原型)
适用于简单、快速的演示文稿创建。
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
# 创建演示文稿
prs = Presentation()
# 添加标题幻灯片
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "演示标题"
subtitle.text = "副标题"
# 添加内容幻灯片
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
title_shape = slide.shapes.title
body_shape = slide.placeholders[1]
title_shape.text = "内容标题"
text_frame = body_shape.text_frame
text_frame.text = "第一个要点"
# 添加更多要点
p = text_frame.add_paragraph()
p.text = "第二个要点"
p.level = 0
# 保存
prs.save('presentation.pptx')
读取和分析内容
文本提取
# 使用 markitdown 转换为 markdown
python -m markitdown presentation.pptx
访问原始 XML
对于注释、演讲者备注、幻灯片布局等高级功能:
# 解压 pptx 文件
unzip presentation.pptx -d unpacked/
关键文件结构:
ppt/presentation.xml - 主演示元数据
ppt/slides/slide{N}.xml - 单个幻灯片内容
ppt/notesSlides/notesSlide{N}.xml - 演讲者备注
ppt/slideLayouts/ - 布局模板
ppt/theme/ - 主题和样式
ppt/media/ - 图片和媒体文件
常用布局索引
python-pptx 的标准布局:
- 0: 标题幻灯片(Title Slide)
- 1: 标题和内容(Title and Content)
- 2: 节标题(Section Header)
- 3: 两栏内容(Two Content)
- 4: 比较(Comparison)
- 5: 仅标题(Title Only)
- 6: 空白(Blank)
- 7: 内容带标题(Content with Caption)
- 8: 图片带标题(Picture with Caption)
添加图表
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# 定义图表数据
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('销售额', (100, 120, 140, 160))
# 添加图表
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
).chart
prs.save('chart_presentation.pptx')
添加表格
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# 添加表格(3行4列)
table = slide.shapes.add_table(3, 4, Inches(2), Inches(2), Inches(6), Inches(2)).table
# 填充表头
table.cell(0, 0).text = '项目'
table.cell(0, 1).text = 'Q1'
table.cell(0, 2).text = 'Q2'
table.cell(0, 3).text = 'Q3'
# 填充数据
table.cell(1, 0).text = '销售额'
table.cell(1, 1).text = '100'
prs.save('table_presentation.pptx')
样式设置
from pptx.util import Pt
from pptx.dml.color import RGBColor
# 字体样式
run.font.name = 'Arial'
run.font.size = Pt(16)
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0) # 红色
# 段落对齐
paragraph.alignment = PP_ALIGN.CENTER
# 段落间距
paragraph.paragraph_format.space_before = Pt(12)
paragraph.paragraph_format.space_after = Pt(12)
paragraph.paragraph_format.line_spacing = 1.5
依赖安装
# Python 方法
pip install python-pptx markitdown
# HTML to PPTX 方法(推荐)
npm install -g pptxgenjs puppeteer
快速参考
| 任务 |
Python |
HTML to PPTX |
| 设计灵活性 |
中等 |
✅ 高 |
| 视觉质量 |
基础 |
✅ 专业 |
| 学习曲线 |
简单 |
中等 |
| 适用场景 |
快速原型 |
✅ 生产级演示 |
最佳实践
- 优先使用 HTML to PPTX 方法用于重要演示
- 在编码前思考设计 - 分析主题、选择调色板
- 保持一致性 - 整个演示使用相同的颜色和字体
- 确保对比度 - 文本必须清晰可读
- 测试在不同设备 - 确保在投影仪上清晰
更多资源
1---2name: ppt3description: PPT 演示文稿创建、编辑和分析。当需要处理演示文稿时使用,支持:(1) 创建新演示文稿,(2) 修改和编辑内容,(3) 处理布局和样式,(4) 添加图表和表格4---5
6# PPT 演示文稿处理技能
7
8## 概述
9
10本技能提供完整的 PowerPoint 演示文稿处理能力,包括创建、编辑和分析 .pptx 文件。
11
12## 创建新演示文稿的推荐工作流程
13
14### 方法一:HTML to PPTX 工作流程(推荐 - 专业设计)
15
16这是创建专业演示文稿的最佳方法,提供完整的设计控制和视觉质量。
17
18#### 设计原则
19
20**关键要求 - 在编写代码前必须做:**
211. **分析内容主题**:这个演示是关于什么的?什么行业、情绪或基调?
222. **检查品牌要求**:如果用户提到公司/组织,考虑其品牌色彩和身份
233. **匹配调色板**:选择反映主题的颜色
244. **说明设计思路**:在编写代码前解释你的设计选择
25
26**设计要求:**
27- ✅ 在编写代码前说明基于内容的设计方法
28- ✅ 仅使用 Web 安全字体:Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact
29- ✅ 通过大小、粗细和颜色创建清晰的视觉层次
30- ✅ 确保可读性:强对比度、适当大小的文本、清晰对齐
31- ✅ 保持一致:重复模式、间距和视觉语言
32
33#### 颜色调色板选择
34
35**创意选色建议:**
36- **超越默认**:什么颜色真正匹配这个主题?避免自动驾驶选择
37- **多角度考虑**:主题、行业、情绪、能量水平、目标受众、品牌身份
38- **大胆尝试**:医疗演示不一定用绿色,金融不一定用深蓝
39- **构建调色板**:选择 3-5 种协调的颜色(主色 + 辅助色 + 强调色)
40- **确保对比**:文本必须在背景上清晰可读
41
42**示例调色板(激发创意 - 选择一个、改编或创建自己的):**
43
441. **经典蓝** - 深蓝 (#1C2833), 石板灰 (#2E4053), 银色 (#AAB7B8), 浅灰 (#F4F6F6)
452. **青绿珊瑚** - 青色 (#5EA8A7), 深青 (#277884), 珊瑚 (#FE4447), 白色 (#FFFFFF)
463. **大胆红** - 红 (#C0392B), 鲜红 (#E74C3C), 橙 (#F39C12), 黄 (#F1C40F), 绿 (#2ECC71)
474. **温暖腮红** - 淡紫 (#A49393), 腮红 (#EED6D3), 玫瑰 (#E8B4B8), 奶油 (#FAF7F2)
485. **勃艮第奢华** - 勃艮第 (#5D1D2E), 深红 (#951233), 锈色 (#C15937), 金色 (#997929)
496. **深紫翡翠** - 紫色 (#B165FB), 深蓝 (#181B24), 翡翠 (#40695B), 白色 (#FFFFFF)
507. **奶油森林绿** - 奶油 (#FFE1C7), 森林绿 (#40695B), 白色 (#FCFCFC)
518. **粉紫** - 粉红 (#F8275B), 珊瑚 (#FF574A), 玫瑰 (#FF737D), 紫色 (#3D2F68)
529. **柠檬李子** - 柠檬绿 (#C5DE82), 李子 (#7C3A5F), 珊瑚 (#FD8C6E), 蓝灰 (#98ACB5)
5310. **黑金** - 金色 (#BF9A4A), 黑色 (#000000), 奶油 (#F4F6F6)
5411. **鼠尾草陶土** - 鼠尾草 (#87A96B), 陶土 (#E07A5F), 奶油 (#F4F1DE), 炭灰 (#2C2C2C)
5512. **炭灰红** - 炭灰 (#292929), 红 (#E33737), 浅灰 (#CCCBCB)
5613. **活力橙** - 橙色 (#F96D00), 浅灰 (#F2F2F2), 炭灰 (#222831)
5714. **森林绿** - 黑 (#191A19), 绿 (#4E9F3D), 深绿 (#1E5128), 白 (#FFFFFF)
5815. **复古彩虹** - 紫 (#722880), 粉 (#D72D51), 橙 (#EB5C18), 琥珀 (#F08800), 金 (#DEB600)
5916. **复古大地** - 芥末 (#E3B448), 鼠尾草 (#CBD18F), 森林绿 (#3A6B35), 奶油 (#F4F1DE)
60
61#### 视觉细节选项
62
63**几何图案:**
64- 对角分隔线代替水平线
65- 不对称列宽(30/70, 40/60, 25/75)
66- 90° 或 270° 旋转文本标题
67- 圆形/六边形图片框架
68- 三角形强调形状
69- 重叠形状增加深度
70
71**边框处理:**
72- 单侧粗边框(10-20pt)
73- 双线边框配对比色
74- 角括号代替完整框架
75- L 形边框(上+左 或 下+右)
76- 标题下划线(3-5pt 粗)
77
78**排版处理:**
79- 极端大小对比(72pt 标题 vs 11pt 正文)
80- 全大写标题 + 宽字母间距
81- 大号显示数字
82- 等宽字体(Courier New)用于数据/统计/技术内容
83- 窄字体(Arial Narrow)用于密集信息
84
85**图表数据样式:**
86- 单色图表 + 单一强调色突出关键数据
87- 横向条形图代替纵向
88- 点图代替条形图
89- 最少网格线或无网格线
90- 数据标签直接在元素上(无图例)
91- 超大数字显示关键指标
92
93**布局创新:**
94- 全出血图片 + 文本叠加
95- 侧边栏(20-30% 宽度)用于导航/上下文
96- 模块化网格系统(3×3, 4×4 块)
97- Z 型或 F 型内容流
98- 浮动文本框覆盖彩色形状
99- 杂志风格多栏布局
100
101**背景处理:**
102- 占据 40-60% 幻灯片的纯色块
103- 渐变填充(仅垂直或对角)
104- 分割背景(两种颜色,对角或垂直)
105- 边到边色带
106- 负空间作为设计元素
107
108#### 工作流程步骤
109
1101. **设计思考**
111 - 分析内容主题和目标受众
112 - 选择 3-5 种颜色的调色板
113 - 决定视觉风格(现代/专业/科技/创意)
114 - 向用户说明设计思路
115
1162. **创建 HTML 幻灯片**
117 - 为每张幻灯片创建 HTML 文件
118 - 使用标准尺寸(720pt × 405pt for 16:9)
119 - 使用 `<h1>`-`<h6>`, `<p>`, `<ul>`, `<ol>` 标签
120 - 应用 CSS 样式实现设计
121
1223. **生成 Node.js 转换脚本**
123 - 使用 PptxGenJS 库
124 - 读取 HTML 并转换为 PPTX
125 - 添加图表、表格等高级元素
126 - 保存 PPTX 文件
127
1284. **运行生成**
129 ```bash
130 node generate_presentation.js
131 ```
132
133#### 完整示例代码
134
135**HTML 幻灯片示例(slide1.html):**
136```html
137<!DOCTYPE html>
138<html>
139<head>
140<style>
141body {
142 margin: 0;
143 padding: 0;
144 width: 720pt;
145 height: 405pt;
146 background: linear-gradient(135deg, #1C2833 0%, #2E4053 100%);
147 display: flex;
148 flex-direction: column;
149 justify-content: center;
150 align-items: center;
151 font-family: Arial, sans-serif;
152}
153h1 {
154 color: #F4F6F6;
155 font-size: 60pt;
156 font-weight: bold;
157 margin: 0;
158 text-align: center;
159}
160p {
161 color: #AAB7B8;
162 font-size: 24pt;
163 margin-top: 20pt;
164}
165</style>
166</head>
167<body>
168 <h1>演示标题</h1>
169 <p>副标题文字</p>
170</body>
171</html>
172```
173
174**Node.js 转换脚本示例:**
175```javascript
176const PptxGenJS = require('pptxgenjs');
177const fs = require('fs');
178const puppeteer = require('puppeteer');
179
180async function createPresentation() {
181 const pptx = new PptxGenJS();
182
183 // 设置演示文稿属性
184 pptx.layout = '16x9';
185 pptx.author = 'Generated by Claude';
186
187 // 为每个 HTML 文件创建幻灯片
188 const htmlFiles = ['slide1.html', 'slide2.html', 'slide3.html'];
189
190 for (const htmlFile of htmlFiles) {
191 const slide = pptx.addSlide();
192
193 // 读取 HTML 内容
194 const html = fs.readFileSync(htmlFile, 'utf8');
195
196 // 使用 Puppeteer 渲染 HTML 为图片
197 const browser = await puppeteer.launch();
198 const page = await browser.newPage();
199 await page.setViewport({ width: 960, height: 540 });
200 await page.setContent(html);
201 const screenshot = await page.screenshot({ type: 'png' });
202 await browser.close();
203
204 // 将图片添加到幻灯片
205 slide.addImage({
206 data: `data:image/png;base64,${screenshot.toString('base64')}`,
207 x: 0,
208 y: 0,
209 w: '100%',
210 h: '100%'
211 });
212 }
213
214 // 保存演示文稿
215 await pptx.writeFile({ fileName: 'presentation.pptx' });
216 console.log('✅ 演示文稿创建成功!');
217}
218
219createPresentation().catch(console.error);
220```
221
222### 方法二:Python-PPTX 直接创建(快速原型)
223
224适用于简单、快速的演示文稿创建。
225
226```python
227from pptx import Presentation
228from pptx.util import Inches, Pt
229from pptx.enum.text import PP_ALIGN
230from pptx.dml.color import RGBColor
231
232# 创建演示文稿
233prs = Presentation()
234
235# 添加标题幻灯片
236title_slide_layout = prs.slide_layouts[0]
237slide = prs.slides.add_slide(title_slide_layout)
238title = slide.shapes.title
239subtitle = slide.placeholders[1]
240title.text = "演示标题"
241subtitle.text = "副标题"
242
243# 添加内容幻灯片
244bullet_slide_layout = prs.slide_layouts[1]
245slide = prs.slides.add_slide(bullet_slide_layout)
246title_shape = slide.shapes.title
247body_shape = slide.placeholders[1]
248
249title_shape.text = "内容标题"
250text_frame = body_shape.text_frame
251text_frame.text = "第一个要点"
252
253# 添加更多要点
254p = text_frame.add_paragraph()
255p.text = "第二个要点"
256p.level = 0
257
258# 保存
259prs.save('presentation.pptx')
260```
261
262## 读取和分析内容
263
264### 文本提取
265
266```bash
267# 使用 markitdown 转换为 markdown
268python -m markitdown presentation.pptx
269```
270
271### 访问原始 XML
272
273对于注释、演讲者备注、幻灯片布局等高级功能:
274
275```bash
276# 解压 pptx 文件
277unzip presentation.pptx -d unpacked/
278```
279
280**关键文件结构:**
281- `ppt/presentation.xml` - 主演示元数据
282- `ppt/slides/slide{N}.xml` - 单个幻灯片内容
283- `ppt/notesSlides/notesSlide{N}.xml` - 演讲者备注
284- `ppt/slideLayouts/` - 布局模板
285- `ppt/theme/` - 主题和样式
286- `ppt/media/` - 图片和媒体文件
287
288## 常用布局索引
289
290python-pptx 的标准布局:
291
292- **0**: 标题幻灯片(Title Slide)
293- **1**: 标题和内容(Title and Content)
294- **2**: 节标题(Section Header)
295- **3**: 两栏内容(Two Content)
296- **4**: 比较(Comparison)
297- **5**: 仅标题(Title Only)
298- **6**: 空白(Blank)
299- **7**: 内容带标题(Content with Caption)
300- **8**: 图片带标题(Picture with Caption)
301
302## 添加图表
303
304```python
305from pptx import Presentation
306from pptx.chart.data import CategoryChartData
307from pptx.enum.chart import XL_CHART_TYPE
308from pptx.util import Inches
309
310prs = Presentation()
311slide = prs.slides.add_slide(prs.slide_layouts[5])
312
313# 定义图表数据
314chart_data = CategoryChartData()
315chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
316chart_data.add_series('销售额', (100, 120, 140, 160))
317
318# 添加图表
319x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
320chart = slide.shapes.add_chart(
321 XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
322).chart
323
324prs.save('chart_presentation.pptx')
325```
326
327## 添加表格
328
329```python
330from pptx import Presentation
331from pptx.util import Inches
332
333prs = Presentation()
334slide = prs.slides.add_slide(prs.slide_layouts[5])
335
336# 添加表格(3行4列)
337table = slide.shapes.add_table(3, 4, Inches(2), Inches(2), Inches(6), Inches(2)).table
338
339# 填充表头
340table.cell(0, 0).text = '项目'
341table.cell(0, 1).text = 'Q1'
342table.cell(0, 2).text = 'Q2'
343table.cell(0, 3).text = 'Q3'
344
345# 填充数据
346table.cell(1, 0).text = '销售额'
347table.cell(1, 1).text = '100'
348
349prs.save('table_presentation.pptx')
350```
351
352## 样式设置
353
354```python
355from pptx.util import Pt
356from pptx.dml.color import RGBColor
357
358# 字体样式
359run.font.name = 'Arial'
360run.font.size = Pt(16)
361run.font.bold = True
362run.font.color.rgb = RGBColor(255, 0, 0) # 红色
363
364# 段落对齐
365paragraph.alignment = PP_ALIGN.CENTER
366
367# 段落间距
368paragraph.paragraph_format.space_before = Pt(12)
369paragraph.paragraph_format.space_after = Pt(12)
370paragraph.paragraph_format.line_spacing = 1.5
371```
372
373## 依赖安装
374
375```bash
376# Python 方法
377pip install python-pptx markitdown
378
379# HTML to PPTX 方法(推荐)
380npm install -g pptxgenjs puppeteer
381```
382
383## 快速参考
384
385| 任务 | Python | HTML to PPTX |
386|------|--------|--------------|
387| 设计灵活性 | 中等 | ✅ 高 |
388| 视觉质量 | 基础 | ✅ 专业 |
389| 学习曲线 | 简单 | 中等 |
390| 适用场景 | 快速原型 | ✅ 生产级演示 |
391
392## 最佳实践
393
3941. **优先使用 HTML to PPTX** 方法用于重要演示
3952. **在编码前思考设计** - 分析主题、选择调色板
3963. **保持一致性** - 整个演示使用相同的颜色和字体
3974. **确保对比度** - 文本必须清晰可读
3985. **测试在不同设备** - 确保在投影仪上清晰
399
400## 更多资源
401
402- [PptxGenJS 官方文档](https://gitbrent.github.io/PptxGenJS/)
403- [python-pptx 官方文档](https://python-pptx.readthedocs.io/)