系列教程:

Python 自动化教程(1) 概述,第一篇 Excel自动化

Python 自动化教程(2) : Excel自动化:使用pandas库

Python 自动化教程(3) : 自动生成PPT文件 Part 1

Python 自动化教程(4) : 自动生成PPT文件 Part 2

Python 自动化教程(5) : 自动生成Word文件

Python 自动化教程(6) : PDF文件处理

四、自动生成PPT文件 

自动化办公中,经常要批量处理office文件。

比如:每月花很多时间写PPT,能自动生成PPT,就好了。

本文的源码和文件下载请点这里

1、office库简介

    本人用 python 写了一个 office库,用于办公自动化,功能是很强的, 包括:PPT自动生成、PPT转长图、PPT带语音播放、Word自动生成、Excel数据处理、图片处理、视频处理、office文档转为PDF、PDF加解密、加水印等等,都是实用的干货。

使用方法极简,大多数功能只需一行、两行代码。

1.1、一行代码自动生成PPT的实战效果

import office 

# 以 template.pptx 为模板,创建 output.pptx 文件, 填入datafile.xlsx文件数据, 保存
office.open_file("output.pptx", "template.pptx").fill('datafile.xlsx').save()

代码简单,但生成的PPT效果却是不简单的。如图:

 

本教程将office库源码、例程、使用方法分享给大家。

1.2、使用PIP 安装office库:

请在命令行,通过PIP安装:

pip install jojo-office

office库的安装名称是 jojo-office

使用时, import office 即可。

import office

office库依赖库包括:python-docx, openpyxl, python-pptx, PyPDF4, reportlab, playsound等, 安装时将自动安装完成。

如需要导入导出DataFrame, 则依赖 pandas 库,请按需要安装

pip install pandas -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

office库只支持新版的office文件(扩展名为 .docx, .xlsx, .pptx),不支持office2003以前的老版本office文件(扩展名为 .doc, .xls, .ppt)。

2、自动生成PPT文件的原理

自动生成PowerPoint文件的方法是:首先写一个模板PowerPoint文件,复制模板创建新文件,再填入数据。 填入不同的数据,则产生不同的PPT文件,从而实现批量生成, 比如:使用每个月的Excel报表文件数据,生成当月的PPT。

模板PPT文件就是一个普通的PPT文件,内容和格式按需要写。只不过在要填入数据的地方,写入变量即可。变量的写法如下:

比如:模板PowerPoint文件 template.pptx,  幻灯片中的文字内容如下:

其中:大括号 { xxx } 包含文字叫作变量。{name}、{age}就是变量。
生成PPT的过程就是填入数据,将变量将替换为相应的值。name变量将替换为name的值。age变量将替换为age的值。

注意:要使用英文的大括号,不要使用全角字符的大括号,否则变量将无法识别。

3、将Excel文件作为数据源,填入PowerPoint模板文件

3.1 文字

Excel文件是 datafile.xlsx,其 Sheet1工作表B2单元格内容是 'Peter', C2格内容是 18。

模板PowerPoint文件 template1.pptx 写成这样:

变量 {Sheet1!B2} 指明 数据来自 Excel文件的 Sheet1 工作表的 B2 单元格。
变量 {Sheet1!C2} 指明 数据来自 Excel文件的 Sheet1 工作表的 C2 单元格。

生成PPT的python程序如下:

import office

# 以 template1.pptx 为模板,创建 output.pptx 新文件
# 如果 output.pptx 文件已存在,则将覆盖原文件
ppt = office.open_file("output.pptx", template="template1.pptx")

# 从 datafile.xlsx 文件中取数据, 填入, 保存
ppt.fill('datafile.xlsx').save() 

上述程序也可以连写为一行,如:

office.open_file("output.pptx", "template1.pptx").fill('datafile.xlsx').save()

程序运行后,生成 output.pptx 文件, 其内容如下:

 小结:

 写模版文件就是在适当的位置写入变量。变量以 { 号开头,} 号结尾。

 指向Excel数据的变量名就是 工作表及单元格的引用地址, 如: {Sheet1!B2} 。

生成PPT就是填入数据。同一模板生成不同的PPT,更换数据即可。

填入数据时,格式(包括字体、大小、位置、颜色)都没有变。

模版PPT文件可以包含多张幻灯片,每一页上都可写入变量,数量不限。

3.2 表格

在模板PPT中创建表格,表格的每一列定义一个变量,可以把多行数据填入PPT表格中。

datafile.xlsx 的 Sheet1工作表有一个表格

模板文件 template2.pptx 中画了一个表格 4行 X 2列,每一列的第一行写上变量,写成这样:

 python程序如下:

import office


ppt = office.open_file("output.pptx", template="template2.pptx")

# 从 datafile.xlsx 文件中取数据, 填入, 保存
ppt.fill('datafile.xlsx').save() 

程序运行后,生成 output.pptx 文件, 其内容如下:

 可见,Excel的表格数据,填入到PPT表格中了。

注:填入表格的数据行数,取决于PPT模板中表格的行数。如果Excel表格行数大于PPT表格行数,则后面的数据不会被填入。

3.3 图表

在PPT模板中创建图表。每个图表有一个数据表,将图表数据表每一列定义为一个变量。生成PPT时,数据将填入PPT图表的数据表,则PPT图表将更新。

在PowerPoint程序中打开模板文件 template3.pptx,创建一个直方图。

 在PowerPoint程序中, 右键单击图表,选择菜单:“编辑数据",  则可以看到图表的数据表。

 修改数据表的第一行,每一列的第一行修改为变量,例如:{商品销售1!B1} 表示本列的数据来自 Excel数据文件的 商品销售工作表 的 B列。 修改后数据表如下图:


python程序如下:

import office

# 以 template3.pptx 为模板,创建 output.pptx 文件,  填入datafile.xlsx 文件数据, 保存
office.open_file("output.pptx", "template3.pptx").fill('datafile.xlsx').save()

程序运行后,生成 output.pptx 文件, 其内容如下:

 可见, PPT图表已更新。

 在PowerPoint中打开刚才生成的文件 output.pptx,右键单击图表,选择菜单:“编辑数据", 
则可以看到PPT图表的数据表已经被更改为Excel文件的相应数据表,如下:

事实上, office库的处理方法,就是更新PPT图表的数据表后, 重建图表。
注:office库的图表功能目前支持2D图表,不支持3D图表。因此,模板中的图表不能是3D图表类型。

3.4  插入图片、视频、音频

如果数据是图片文件名,则可以在PPT中插入该图片文件。

模板文件 template4.pptx 中画了一个文本框,填入文字,写上变量 {@Sheet1!D2},变量名前加上一个 ‘@’字符表明它是一个特殊变量。当它是一个图片文件名时,将插入该图片文件。模板如图:

 python程序如下:

import office

# 以 template4.pptx 为模板,创建 output.pptx 文件,  填入datafile.xlsx 文件数据, 保存
office.open_file("output.pptx", "template4.pptx").fill('datafile.xlsx').save()

注意: datafile.xlsx 文件 Sheet1!D2 单元格 的值是 "peter.jpg",是一个图片文件名。 该文件名没有指明路径,因此这个图片文件要放在当前目录下。当然,文件名使用绝对路径则没有问题。


程序运行后,生成 output.pptx 文件, 其内容如下。可见,PPT文档插入了一张图片 peter.jpg, 图片大小和位置与变量所在的文本框一致。

 同理,  .mp3, .mp4 等音频、视频文件也可以插入PPT文档。

3.5 生成PPT综合报告

将上述 文字、表格、图表、图片功能合在一起,可以生成PPT综合报告了。

数据文件在 datafile.xlsx , 这个文件中有多个工作表: 商品销售、客户、库存、汇总。

模板文件 template5.pptx 是一个典型的PPT报告,有表格、图表、文字、图片等。其内容如下:

 

python程序如下:

import office

# 以 template5.pptx 为模板,创建 report.pptx 文件,  填入datafile.xlsx 文件数据, 保存
office.open_file("report.pptx", "template5.pptx").fill('datafile.xlsx').save()

程序运行后,生成 output.pptx 文件, 其内容如下:

  

3.6 将PPT存盘为一张长图 

一张长图就是把PPT每一页变成图片,连接为一张长图。

注意:存盘为长图的功能,需要本机安装了Microsoft Powerpoint程序或WPS Office

打开pptx文件,存盘为一个jpg文件,即可保存为一张长图。

python程序如下:

# 打开 report.pptx, 存盘为 一张长图 (注:存盘文件名为一个jpg文件,就是保存为一张长图)
office.open_file("report.pptx").save("long.jpg")

 如果长图需要加水印,则在调用save()时加上 watermark 参数, 程序如下:

# 打开 report.pptx, 存盘为 一张长图 (注:存盘文件名为一个jpg文件,就是保存为一张长图)
office.open_file("report.pptx").save("long.jpg", watermark="商业秘密,注意保管")

一张漂亮的长图就产生了。

3.6 将PPT存盘为PDF

# 打开 report.pptx, 存盘为PDF, 加水印
office.open_file("report.pptx").save("report.pdf", watermark="商业秘密,注意保管")

存为PDF,save()文件名取名为 .pdf 即可。 watermark是水印文字。

注意:PPTX转PDF的功能,需要本机安装了Microsoft Powerpoint程序或WPS Office

4、循环播放PPT,同步播放语音

放PPT,每隔几秒自动翻页,播放到最后一页后跳回第一页,循环播放

python程序如下:

# 循环播放PPT,打开 report.pptx, 播放PPT, 每隔3秒换到下一页
office.open_file("report.pptx").play(3)

程序运行后,将启动Microsoft Powerpoint程序(或WPS Office),自动进入全屏模式,逐页显示PPT,循环播放。上面的代码是每隔3秒换一页。播放过程中,按ESC键中断播放,退出程序

注意:播放PPT的功能,需要本机安装了Microsoft Powerpoint程序或WPS Office

如果每一页的跳转时间不同,可以把间隔时间写成一个数组。

office.open_file("report.pptx").play([1, 3, 2, 1])

间隔时间数组 [1, 3, 2, 1] 的含义是: 第一页停1秒,第二页停3秒,第三页停2秒,第四页停1秒。

如果有更多页,把数组写长即可。

播放PPT时,可以在播放到某个页面时同步播放语音文件。

# 循环播放PPT, 在第2页时,播放语音文件 1.wav
office.open_file("report.pptx").play([
    1,
    [3, "1.wav"],
    3,
    [1, "2.wav"]
])

把间隔时间数组中,需要播放语音的页面位置写成 数组, 形如: [间隔秒数,语音文件名]。

如上, 当播放到第二页时,播放 1.wav, 停留3秒。 当播放到第四页时,播放 2.wav, 停留1秒。 

也可以把播放间隔写成一个文本文件。 比如: play.txt,内容如下:

1
3 1.wav
3
1 2.wav

格式为: 每一行表示一页PPT的播放 间隔秒数 + 空格 + 语音文件名。

则,python程序中, 引用这个文件即可。

office.open_file("report.pptx").play("play.txt")

效果与之前用数组表达的是一样的。

播放PPT带语音的应用场景:例如: 开展览会时,自动放PPT+语音。省去解说人员。

小结:

1, office库提供了强大的PPT生成功能。

2, 写一个模板PPT文件,编写变量。填入数据,即可生成PPT.

3,  数据可以放在Excel文件中。变量为 Excel的 {工作表!单元格} 即可。

4,PPT可以存为长图。可以带语音播放。

本文的源码和文件下载请点这里

续篇:

office库还有其他许多功能,下节课再讲。

office库还在开发完善中,偶有bug请见谅、或提改进。

有兴趣深入研究的,可以看office.py的源码。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐