Python办公自动化:利用python-pptx批量生成与转换PPT

山海之间
山海之间
发布时间:2026-10-14| 4人浏览过
原创

本文详解如何使用Python的python-pptx库实现PPT批量自动化处理。通过预置模板,程序可自动读取现有PPT内容,并基于指定版式(如标题、内容、图表等)动态填充数据。文章涵盖形状添加、占位符操作及表格图表插入,并介绍了Windows环境下将PPT批量转换为PDF的方法,适用于需要高频生成格式统一文档的场景。

当面临大量格式相同但内容各异的PPT制作任务时,利用Python进行自动化处理能显著降低工作量。

PPT由内容与格式两部分构成。Python操作PPT的核心优势在于内容的读取与填充,而非格式修改。因此,最佳实践是先制作一个包含所需格式的PPT模板,随后使用Python复制该模板文件,并在此基础上进行内容的读写操作。

安装python-pptx模块

pip install python-pptx

读取PPT文件内容

假设存在名为「测试.pptx」的文件,其内部结构如下:

可通过以下代码读取该文件的具体内容:


from pptx import Presentation
prs = Presentation("测试.pptx")
for index, slide in enumerate(prs.slides):
    print(f"第 {index+1} 页")
    for shape in slide.shapes:
        if shape.has_text_frame:
            text_frame = shape.text_frame
            # print(text_frame.text)
            # 如果分段读就用下面的代码
            for paragraph in text_frame.paragraphs:
                print(paragraph.text)

执行上述代码后,输出结果如下所示:

 

写入PPT内容

首先演示一个基础示例。

若需生成如图所示的PPT页面:

实现该功能的代码如下:


from pptx import Presentation
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 = "Hello, World!"
subtitle.text = "python-pptx was here!"
prs.save('test.pptx')

添加幻灯片

幻灯片拥有特定的版式,pptx库提供了9种可选版式,分别为:

  • Title (演示文稿标题幻灯片)
  • Title and Content (标题与内容)
  • Section Header (章节标题,有时称为过渡页)
  • Two Content (并排两个内容文本框)
  • Comparison (并排比较,每侧内容框带有额外标题)
  • Title Only (仅标题)
  • Blank (空白)
  • Content with Caption (带说明的内容)
  • Picture with Caption (带说明的图片)

上述版式分别对应PPT中的如下布局,图中已用数据标识:

例如,若要添加一张采用“标题与内容”版式的幻灯片,代码编写如下:


from pptx import Presentation
prs = Presentation()
SLD_LAYOUT_TITLE_AND_CONTENT = 1  ##标题和内容版式的序号
slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_CONTENT]
slide = prs.slides.add_slide(slide_layout)
 

为幻灯片添加具体内容

在添加内容前,需理解“形状”的概念。从技术层面讲,幻灯片上可放置9种类型的形状:

  • 形状 - 带有填充和轮廓的自动形状
  • 文本框 - 无填充和轮廓的自动形状
  • 占位符 - 可出现在幻灯片布局或母版上的自动形状,在使用该布局的幻灯片上继承,允许添加采用占位符格式的内容
  • 线路/连接器
  • 图片
  • 表格 - 由行和列组成的结构
  • 图表 – 包括饼图、折线图等。
  • 智能艺术 - 目前尚不支持,但若存在则予以保留
  • 媒体剪辑——视频或音频

每个幻灯片均由一个形状树组织,之所以称为树,是因为其结构通常具有层级性;形状树中的节点可以是组形状,它本身可包含形状并具有与形状树相同的语义。对于大多数用途,形状树具有列表语义。

获取幻灯片中的形状:

shapes = slide.shapes

自动形状属于规则形状,如正方形、圆形、三角形、星星等。共有182种不同的形状可供选择。其中120个形状具有调整“手柄”,可用于改变形状外观。

许多形状类型共享一组公共属性。此处将介绍其中许多形状,因为部分形状仅是AutoShape的特殊形式。

添加自动形状

以下代码用于添加一个圆角矩形形状,尺寸为1英寸见方,并放置在距离幻灯片左上角1英寸处:


from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches
shapes = slide.shapes
left = top = width = height = Inches(1.0)
shape = shapes.add_shape(
    MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height
)
prs.save('新建幻灯片.pptx')

关于所有182种自动形状类型的完整列表,具体请参阅官方文档中的MSO_AUTO_SHAPE_TYPE枚举项。

占位符

占位符也是一种形状,共有18种类型的占位符,包括:标题、中心标题、副标题、正文、内容、图片、剪贴画、图表、表格、智能艺术、日期、页脚、幻灯片编号、媒体剪辑、标题、垂直正文、垂直对象、垂直标题。

幻灯片上的占位符可为空或已填充状态。这在图片占位符中表现最为明显。未填充时,占位符会显示可自定义的提示文本。内容丰富的占位符在为空时也会显示一个或多个内容插入按钮。

纯文本占位符在输入文本的第一个字符时进入“填充”模式,并在删除文本的最后一个字符时返回“未填充”模式。内容丰富的占位符在插入图片等内容时进入填充模式,并在删除该内容时返回未填充模式。为了删除填充的占位符,形状必须被删除两次。第一次删除操作将删除内容并将占位符恢复到未填充模式。额外的删除操作将删除占位符本身。可以通过重新应用布局来恢复已删除的占位符。

访问占位符


>>> prs = Presentation()
>>> slide = prs.slides.add_slide(prs.slide_layouts[8])
>>> for shape in slide.placeholders:
...     print('%d %s' % (shape.placeholder_format.idx, shape.name))
...
0  Title 1
1  Picture Placeholder 2
2  Text Placeholder 3

如果已知占位符的索引,也可通过索引来访问:


>>> slide.placeholders[1]
<pptx.parts.slide.PicturePlaceholder object at 0x10d094590>
>>> slide.placeholders[2].name
'Text Placeholder 3'

将内容插入占位符


>>> prs = Presentation()
>>> slide = prs.slides.add_slide(prs.slide_layouts[8])
>>> placeholder = slide.placeholders[1]  # idx key, not position
>>> placeholder.name
'Picture Placeholder 2'
>>> placeholder.placeholder_format.type
PICTURE (18)
>>> picture = placeholder.insert_picture('my-image.png')

若需插入表格:


from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
title_only_slide_layout = prs.slide_layouts[5]
slide = prs.slides.add_slide(title_only_slide_layout)
shapes = slide.shapes
shapes.title.text = 'Adding a Table'
rows = cols = 2
left = top = Inches(2.0)
width = Inches(6.0)
height = Inches(0.8)
table = shapes.add_table(rows, cols, left, top, width, height).table
# set column widths
table.columns[0].width = Inches(2.0)
table.columns[1].width = Inches(4.0)
# write column headings
table.cell(0, 0).text = 'Foo'
table.cell(0, 1).text = 'Bar'
# write body cells
table.cell(1, 0).text = 'Baz'
table.cell(1, 1).text = 'Qux'
prs.save('write_ppt_table.pptx')

若需插入图表:


from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
# create presentation with 1 slide ------
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# define chart data ---------------------
chart_data = CategoryChartData()
chart_data.categories = ['East', 'West', 'Midwest']
chart_data.add_series('Series 1', (19.2, 21.4, 16.7))
# add chart to slide --------------------
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
) 
prs.save('write_ppt_chart.pptx')

PPT转Pdf

以下方法仅适用于Windows系统


def PPTtoPDF2(inputFileName, outputFileName, formatType = 32):
    import comtypes.client
    powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
    powerpoint.Visible = 1
    if outputFileName[-3:] != 'pdf':
        outputFileName = outputFileName + ".pdf"
    deck = powerpoint.Presentations.Open(inputFileName)
    deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdf
    deck.Close()
    powerpoint.Quit()

最后的话

本文旨在抛砖引玉,更多复杂的PPT操作,请移步至文末的官方文档。

参考文档:

https://python-pptx.readthedocs.io/en/latest/user/quickstart.html

以上就是Python办公自动化PPT批量转换操作的详细内容,更多关于Python办公自动化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。