办公文档
需要以代码批量生成、编辑或提取 .pptx 演示文稿时,用…
当你需要通过 Python 程序化创建、修改或读取 PowerPoint .pptx 文件时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要以代码批量生成、编辑或提取 .ppt特定
解决思路
- 安装依赖:运行 `pip install python-pptx`。
- 导入核心模块:`from pptx import Presentation`;按需导入 `from pptx.util import Inches, Pt`、`from pptx.enum.shapes import MSO_SHAPE`、`from pptx.enum.text import PP_ALIGN`、`from pptx.dml.color import RGBColor`、`from pptx.chart.data import CategoryChartData`、`from pptx.enum.chart import XL_CHART_TYPE`。
- 创建新演示文稿:`prs = Presentation()`。
- 打开已有演示文稿:`prs = Presentation('existing.pptx')`。
- 理解结构:`Presentation` 包含 `slide_layouts`、`slides`、`slide_masters`;每个 `slide` 包含 `shapes`、`placeholders`;`shape` 可含 `text_frame`、`table`。
- 使用常用布局索引:`TITLE_SLIDE = 0`、`TITLE_CONTENT = 1`、`SECTION_HEADER = 2`、`TWO_CONTENT = 3`、`COMPARISON = 4`、`TITLE_ONLY = 5`、`BLANK = 6`,并注意模板可能变化。
- 按布局新增幻灯片:`slide_layout = prs.slide_layouts[TITLE_CONTENT]`;`slide = prs.slides.add_slide(slide_layout)`。
- 创建标题页:用布局 0 新增幻灯片,设置 `slide.shapes.title.text` 和 `slide.placeholders[1].text`。
- 用占位符添加文本内容:取 `body = slide.placeholders[1]`,`tf = body.text_frame`,设置 `tf.text` 为第一个要点。
- 添加更多段落:`p = tf.add_paragraph()`;设置 `p.text`;用 `p.level = 0` 或 `p.level = 1` 控制层级。
- 添加文本框:用 `Inches` 定义 `left`、`top`、`width`、`height`;调用 `slide.shapes.add_textbox(left, top, width, height)`;取 `tf = txBox.text_frame`;设置 `tf.paragraphs[0].text`;设置 `p.font.bold`、`p.font.size` 等。
- 添加形状:调用 `slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(1), Inches(2), Inches(3), Inches(1.5))`;用 `shape.text` 写入文字。
- 使用常见形状常量:`MSO_SHAPE.RECTANGLE`、`MSO_SHAPE.ROUNDED_RECTANGLE`、`MSO_SHAPE.OVAL`、`MSO_SHAPE.CHEVRON`、`MSO_SHAPE.ARROW_RIGHT`、`MSO_SHAPE.CALLOUT_ROUNDED_RECTANGLE`。
- 添加图片:调用 `slide.shapes.add_picture('image.png', Inches(1), Inches(2), width=Inches(4))`,仅指定宽度时高度自动。
- 指定图片宽高:调用 `slide.shapes.add_picture('logo.png', Inches(8), Inches(0.5), Inches(1.5), Inches(0.75))`。
- 创建表格:定义 `rows, cols, left, top, width, height`;调用 `slide.shapes.add_table(rows, cols, left, top, width, height).table`。
- 设置表格列宽:`table.columns[0].width = Inches(2)`、`table.columns[1].width = Inches(3)`、`table.columns[2].width = Inches(3)`。
- 写入表头并加粗:遍历 `headers`,设置 `table.cell(0, i).text = header`,并设置 `cell.text_frame.paragraphs[0].font.bold = True`。
- 写入表格数据:遍历 `data`,从第 1 行开始,设置 `table.cell(row_idx, col_idx).text = value`。
- 创建图表数据:用 `CategoryChartData()`;设置 `chart_data.categories`;调用 `chart_data.add_series('Sales', (...))` 添加系列。
- 添加图表:用 `slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data).chart`;`x, y, cx, cy` 用 `Inches` 定义。
- 自定义图表图例:设置 `chart.has_legend = True`;设置 `chart.legend.include_in_layout = False`。
- 格式化文本:取 `run = p.runs[0]`;设置 `run.font.name`、`run.font.size`、`run.font.bold`、`run.font.italic`、`run.font.color.rgb = RGBColor(...)`。
- 设置形状填充:调用 `shape.fill.solid()`;设置 `shape.fill.fore_color.rgb = RGBColor(...)`。
- 设置形状线条:设置 `shape.line.color.rgb = RGBColor(...)`;设置 `shape.line.width = Pt(2)`。
- 设置段落对齐:`p.alignment = PP_ALIGN.CENTER`,也可用 `PP_ALIGN.LEFT`、`PP_ALIGN.RIGHT`、`PP_ALIGN.JUSTIFY`。
- 最佳实践:从 `.pptx` 模板开始,保持品牌一致。
- 最佳实践:先规划幻灯片结构,再写代码。
- 最佳实践:复用 Slide Masters,保持整个演示文稿一致。
- 最佳实践:添加前压缩图片。
- 最佳实践:始终验证生成的演示文稿。
- 幻灯片生成器模式:定义 `create_deck(title, slides_content)`;创建 `Presentation()`;用布局 0 添加标题页并设置标题。
- 幻灯片生成器模式:遍历 `slides_content`,用布局 1 添加内容页,设置标题。
- 幻灯片生成器模式:取 `body = slide.placeholders[1]`;`tf = body.text_frame`;遍历 `points`,第一个点写入 `tf.text`,其余用 `tf.add_paragraph()` 添加。
- 数据驱动图表模式:定义 `add_bar_chart(slide, title, categories, values)`;创建 `CategoryChartData()`;设置 `categories`;调用 `add_series('Values', values)`。
- 数据驱动图表模式:用 `slide.shapes.add_chart(XL_CHART_TYPE.BAR_CLUSTERED, Inches(1), Inches(2), Inches(8), Inches(4), chart_data).chart` 添加条形图。
- 数据驱动图表模式:设置 `chart.chart_title.text_frame.text = title`,返回 `chart`。
- 示例:创建 pitch deck 时,添加标题页并设置 'StartupX' 和副标题。
- 示例:添加 Problem 页,使用布局 1,写入问题要点和子要点。
- 示例:添加 Solution 页,使用布局 1,写入多个解决方案要点。
- 示例:添加 Market 页,使用布局 5,设置标题,并用 `CategoryChartData` 和 `XL_CHART_TYPE.LINE` 添加折线图。
- 示例:创建 sales report 时,添加标题页并设置标题和 'Q4 2024'。
- 示例:添加数据页,使用布局 5,设置标题,创建 5x4 表格。
- 示例:在表格中写入表头 `Region`、`Revenue`、`Growth`、`Target` 并加粗。
- 示例:写入数据行 North America、Europe、Asia Pacific、Latin America 及其数值。
- 保存演示文稿:调用 `prs.save('pitch_deck.pptx')` 或 `prs.save('sales_report.pptx')`。
- 提取文本:遍历 `prs.slides`、`slide.shapes`、`shape.text_frame` 读取文本,或使用 `extract_from_pptx`。
- 若使用 office-mcp:调用 `create_pptx`、`extract_from_pptx`、`add_slide`、`update_slide` 工具进行创建、提取、新增幻灯片和更新幻灯片。
适用边界 · 注意事项
- 不适合需要复杂动画、SmartArt 或视频嵌入的场景。
- 不适合需要复杂母版幻灯片编辑的场景。
- 不适合需要非标准 Office 图表类型的场景。