背景
在处理大量演示文稿时,手动调整格式、排版和插入内容往往效率低下且容易出错。利用 Python 的 python-pptx 库可以自动化完成这些重复性工作,例如批量修改幻灯片样式、统一字体大小或根据数据生成报告。
本文介绍了如何使用 Python 的 python-pptx 库自动化生成和编辑 PowerPoint 演示文稿。内容包括安装依赖、创建演示文稿、添加幻灯片、设置文本样式(字体、大小、加粗等)、插入图片及表格等核心功能。通过代码示例展示了批量处理 PPT 格式的方法,适用于需要重复性排版工作的场景,帮助开发者提高办公效率。

在处理大量演示文稿时,手动调整格式、排版和插入内容往往效率低下且容易出错。利用 Python 的 python-pptx 库可以自动化完成这些重复性工作,例如批量修改幻灯片样式、统一字体大小或根据数据生成报告。
首先需要使用 pip 安装 python-pptx 库。如果下载速度较慢,建议使用国内镜像源。
pip install python-pptx
或者指定清华镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-pptx
创建一个基本的 PPT 文件主要包含三个步骤:导入模块、实例化 Presentation 对象、保存文件。
from pptx import Presentation
# 创建一个新的演示文稿对象
prs = Presentation()
# 保存为文件
prs.save('example.pptx')
此时生成的 PPT 是空白的,没有幻灯片。如果需要基于现有模板创建,可以在实例化时加载已有文件:
prs = Presentation('template.pptx')
python-pptx 提供了多种预设的幻灯片布局(Layouts)。可以通过索引访问不同的布局样式。
# 获取所有可用的布局
layouts = prs.slide_layouts
# 通常索引 0 是标题幻灯片,1 是标题和内容等
# 这里以索引 1 为例
slide_layout = prs.slide_layouts[1]
使用 add_slide 方法在演示文稿中添加新的幻灯片。
slide = prs.slides.add_slide(slide_layout)
PPT 中的文本框可以通过占位符(Placeholder)进行访问。支持设置字体粗细、斜体、大小和下划线。
from pptx.util import Inches, Pt
# 获取标题占位符
title_shape = slide.shapes.title
title_shape.text = '这是标题'
# 获取正文占位符 (通常是索引 1)
body_shape = slide.shapes.placeholders[1]
# 添加新段落
new_para = body_shape.text_frame.add_paragraph()
new_para.text = '这是正文内容'
new_para.font.bold = True
new_para.font.italic = False
new_para.font.size = Pt(18)
new_para.font.underline = True
插入图片需要指定图片路径以及位置尺寸(单位通常为英寸 Inches)。
# 确保图片路径正确
img_path = 'image.jpg'
left = top = Inches(1)
width = Inches(4)
height = Inches(3)
pic = slide.shapes.add_picture(img_path, left, top, width, height)
表格需要指定行数和列数,以及位置和尺寸。
rows, cols = 3, 2
left, top = Inches(1), Inches(4)
width, height = Inches(6), Inches(2)
table = slide.shapes.add_table(rows, cols, left, top, width, height).table
# 填充单元格
for i in range(rows):
for j in range(cols):
table.cell(i, j).text = f'Row {i}, Col {j}'
以下是一个完整的脚本示例,演示了如何从头创建一个包含标题页、内容页、图片和表格的 PPT。
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
import os
def create_ppt():
# 初始化演示文稿
prs = Presentation()
# 1. 添加标题幻灯片
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.shapes.placeholders[1]
title.text = "Python 自动化 PPT 演示"
subtitle.text = "Generated by python-pptx"
# 2. 添加内容幻灯片
content_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(content_slide_layout)
# 设置标题
title = slide.shapes.title
title.text = "功能概览"
# 设置正文
body = slide.shapes.placeholders[1]
tf = body.text_frame
p = tf.paragraphs[0]
p.text = "- 自动创建幻灯片"
p.font.bold = True
p = tf.add_paragraph()
p.text = "- 自定义文本样式"
p.level = 1
p = tf.add_paragraph()
p.text = "- 插入图片与表格"
p.level = 1
# 3. 添加图片幻灯片
img_slide_layout = prs.slide_layouts[5] # 空白布局
slide = prs.slides.add_slide(img_slide_layout)
# 添加标题
title = slide.shapes.add_textbox(Inches(1), Inches(0.5), Inches(6), Inches(1))
title.text_frame.text = "图片展示区域"
title.text_frame.paragraphs[0].font.size = Pt(24)
title.text_frame.paragraphs[0].font.bold = True
# 添加图片 (注意:实际运行时请确保图片存在,否则报错)
if os.path.exists('logo.png'):
slide.shapes.add_picture('logo.png', Inches(1), Inches(2), Inches(4), Inches(3))
else:
# 如果没有图片,添加一个矩形代替说明
shape = slide.shapes.add_shape(1, Inches(1), Inches(2), Inches(4), Inches(3)) # 1 is msoShapeRectangle
shape.fill.solid()
shape.fill.fore_color.rgb = RGBColor(200, 200, 200)
shape.text_frame.text = "图片占位符"
# 4. 添加表格幻灯片
table_slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(table_slide_layout)
title = slide.shapes.add_textbox(Inches(1), Inches(0.5), Inches(6), Inches(1))
title.text_frame.text = "数据表格示例"
title.text_frame.paragraphs[0].font.size = Pt(24)
rows, cols = 3, 3
table = slide.shapes.add_table(rows, cols, Inches(1), Inches(2), Inches(6), Inches(2)).table
headers = ['项目', '状态', '进度']
data = [
['任务 A', '进行中', '50%'],
['任务 B', '已完成', '100%'],
['任务 C', '未开始', '0%']
]
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
cell.text_frame.paragraphs[0].font.bold = True
for i, row_data in enumerate(data):
for j, val in enumerate(row_data):
table.cell(i+1, j).text = val
# 保存文件
prs.save('final_report.pptx')
print("PPT 生成成功!")
if __name__ == '__main__':
create_ppt()
通过 python-pptx 库,开发者可以将繁琐的 PPT 制作工作转化为代码逻辑。这不仅适用于简单的文档生成,还可以结合数据分析结果自动生成报表。掌握这一技能能显著提升办公自动化水平,减少重复劳动。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online