跳到主要内容
Python 办公自动化:使用 python-pptx 操作 PPT 基础(上) | 极客日志
Python PPT制作
Python 办公自动化:使用 python-pptx 操作 PPT 基础(上) 综述由AI生成 介绍如何使用 Python 的 python-pptx 库进行 PPT 自动化操作。内容涵盖 PPT 文档结构解析、幻灯片创建与删除、文本框插入及样式配置。通过详细代码示例,演示了如何设置字体、颜色、对齐方式及背景填充。此外还补充了图片与表格插入的完整实现方案,并提供了一个综合性的项目实战脚本,帮助开发者快速掌握批量生成 PPT 文件的核心技巧。
接口猎人 发布于 2025/2/7 更新于 2026/6/11 23 浏览前言
在办公场景中,PPT 演示文稿的批量生成与修改是常见需求。Python 凭借其丰富的生态库,成为实现此类自动化的首选工具。本文将深入讲解如何使用 python-pptx 库进行 PPT 的基础操作,涵盖文档结构、幻灯片管理、文本样式设置以及媒体元素插入。
环境准备
操作 PPT 最核心的依赖库是 python-pptx。请在虚拟环境中安装该库:
pip3 install python-pptx
在编写代码前,需要导入必要的模块:
from pptx import Presentation
from pptx.util import Inches, Cm, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE_TYPE
PPT 文档结构解析
理解 PPT 的对象模型是自动化操作的前提。一个 PPT 文件对应一个 Presentation 对象,它包含多个 Slide(幻灯片)对象。每张幻灯片的内容由各种形状 Shape 组成,包括文字框、图片、占位符、表格和普通形状等。
1. 版式模板 (Layouts)
使用 Presentation 对象的 slide_layouts 属性可以获取内置的母版样式。通常有 11 种标准版式,索引从 0 开始:
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 (图片和标题)
9 : Title and Vertical Text (标题和竖排内容)
10 : Vertical Title and Text (竖排标题和文本)
开发者也可以通过自定义占位符 (PlaceHolder) 来满足特定场景需求。获取版式示例如下:
slide_layout = presentation.slide_layouts[1 ]
幻灯片管理
1. 添加幻灯片
添加幻灯片需遵循三步走策略:实例化 Presentation 对象 -> 选择版式 Layout -> 调用 add_slide 方法。
def add_slide (presentation, slide_style_index ):
"""
在 PPT 文档中,以内置的版式添加幻灯片
:param presentation: 文档对象
:param slide_style_index: 版式索引
:return: 新创建的幻灯片对象
"""
slide_layout = presentation.slide_layouts[slide_style_index]
slide = presentation.slides.add_slide(slide_layout)
return slide
2. 获取与遍历幻灯片 Presentation 对象的 slides 属性返回所有幻灯片对象的列表。可以通过索引访问特定幻灯片。
def get_slides (presentation ):
"""获取所有的幻灯片及数量"""
slides = list (presentation.slides)
slide_num = len (slides)
return slides, slide_num
def get_slide (presentation, slide_index ):
"""根据索引获取某一个幻灯片"""
slides, _ = get_slides(presentation=presentation)
if 0 <= slide_index < len (slides):
return slides[slide_index]
return None
slides, count = get_slides(presentation)
print (f'当前共有 {count} 张幻灯片' )
current_slide = get_slide(presentation, 1 )
3. 删除幻灯片 删除幻灯片需要直接操作底层的 _sldIdLst 列表,移除指定索引的元素。
def del_slide (presentation, slide_index=0 ):
"""删除某一张幻灯片"""
slides = list (presentation.slides._sldIdLst)
if 0 <= slide_index < len (slides):
presentation.slides._sldIdLst.remove(slides[slide_index])
return True
return False
del_slide(presentation, 3 )
文字及段落操作
1. 插入文本框 首先需要指定幻灯片对象 Slide,利用 slide.shapes 属性获取形状队列,然后调用 add_textbox 函数。
def insert_textbox (slide, left, top, width, height, unit=Cm ):
"""
幻灯片中添加文本框
:param unit: 单位,默认设置为 Cm (厘米)
:param slide: 幻灯片对象
:param left: 左边距
:param top: 上边距
:param width: 宽度
:param height: 高度
:return: 文本框对象,文本框形状对象
"""
textbox = slide.shapes.add_textbox(
left=unit(left),
top=unit(top),
width=unit(width),
height=unit(height)
)
tf = textbox.text_frame
return textbox, tf
2. 设置段落内容 文本框创建后自带一个段落对象。可以直接设置 .text 属性,或使用 add_paragraph() 添加新段落。
textbox, tf = insert_textbox(slide, 8 , 2 , 10 , 4 , unit=Cm)
paragraph_default = tf.paragraphs[0 ]
paragraph_default.text = "这是第一段内容"
paragraph_new = tf.add_paragraph()
paragraph_new.text = "这是第二段内容"
3. 字体与样式设置 支持设置字体名称、颜色、大小、加粗、斜体以及对齐方式。
def set_font_style (font, font_name=None , font_color=None , font_size=-1 , font_bold=False , font_italic=False ):
"""设置字体样式"""
if font_name:
font.name = font_name
if font_color and len (font_color) == 3 :
font.color.rgb = RGBColor(font_color[0 ], font_color[1 ], font_color[2 ])
if font_size != -1 :
font.size = Pt(font_size)
font.bold = font_bold
font.italic = font_italic
def set_paragraph_style (paragraph, alignment=PP_ALIGN.LEFT ):
"""设置段落样式"""
paragraph.alignment = alignment
for run in paragraph.runs:
set_font_style(run.font, font_name='Microsoft YaHei' , font_color=(0 , 0 , 0 ), font_size=14 )
4. 背景颜色填充 def set_widget_bg (widget, bg_rgb_color=None ):
"""设置【文本框/单元格/形状】的背景颜色"""
if bg_rgb_color and len (bg_rgb_color) == 3 :
widget.fill.solid()
widget.fill.fore_color.rgb = RGBColor(bg_rgb_color[0 ], bg_rgb_color[1 ], bg_rgb_color[2 ])
set_widget_bg(textbox, [0 , 255 , 0 ])
5. 自动换行 当文字过长时,可通过设置 word_wrap 属性实现自动换行。
图片与表格插入
1. 插入图片 使用 add_picture 方法,需指定图片路径和尺寸。
def add_image (slide, image_path, left, top, width, height ):
"""在幻灯片插入图片"""
slide.shapes.add_picture(
image_path,
left=Inches(left),
top=Inches(top),
width=Inches(width),
height=Inches(height)
)
2. 插入表格 使用 add_table 方法,可指定行数、列数及位置。
def add_table (slide, rows, cols, left, top, width, height ):
"""在幻灯片插入表格"""
table = slide.shapes.add_table(rows, cols, Inches(left), Inches(top), Inches(width), Inches(height)).table
for i in range (rows):
for j in range (cols):
cell = table.cell(i, j)
cell.text = f'Row {i} , Col {j} '
return table
完整项目实战示例 以下是一个综合脚本,演示如何创建一个包含标题页、内容页、图片和表格的完整 PPT 文件。
from pptx import Presentation
from pptx.util import Inches, Cm, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
def create_ppt_demo (output_path ):
prs = Presentation()
slide_layout = prs.slide_layouts[0 ]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1 ]
title.text = "Python 自动化演示"
subtitle.text = "基于 python-pptx 库"
slide_layout = prs.slide_layouts[1 ]
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
title.text = "功能概览"
body = slide.placeholders[1 ]
tf = body.text_frame
p = tf.paragraphs[0 ]
p.text = "1. 幻灯片管理"
p.font.bold = True
p2 = tf.add_paragraph()
p2.text = "2. 文本样式控制"
p2.font.bold = True
p3 = tf.add_paragraph()
p3.text = "3. 多媒体元素插入"
p3.font.bold = True
prs.save(output_path)
print (f'PPT 已保存至:{output_path} ' )
if __name__ == '__main__' :
create_ppt_demo('demo_output.pptx' )
常见问题与最佳实践
单位转换 :python-pptx 默认支持 Inches (英寸)、Cm (厘米)、Pt (磅)。建议统一使用一种单位以避免布局错乱。
内存管理 :处理大量幻灯片时,注意及时释放资源,避免内存泄漏。
兼容性 :生成的 PPTX 文件兼容 Microsoft PowerPoint 2007+ 及 WPS Office。
错误处理 :在访问不存在的占位符时应增加 try-except 块保护。
结语 本文详细讲解了 Python 操作 PPT 的基础架构与核心 API。掌握了幻灯片增删改查、文本样式配置以及基础媒体插入后,即可应对大部分办公自动化场景。后续章节将深入探讨图表绘制、动画效果及复杂报表生成等高级主题。
相关免费在线工具 curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online