【办公自动化】使用Python批量生成PPT版荣誉证书

🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
目录
一、Python处理PPT
二、批量生成PPT版荣誉证书
三、往期推荐
一、Python处理PPT
使用Python处理PPT文件通常需要使用第三方库来简化对PPT文件的读取、写入和修改操作。下面介绍一些常用的Python库和它们的功能:
-
python-pptx:这是一个流行的Python库,用于创建、读取和修改PPTX(Office Open XML格式)文件。您可以使用它创建新的幻灯片、添加文本、图像和形状,还可以修改幻灯片的样式和布局。
-
python-pptx-template:这个库在python-pptx的基础上增加了对模板的支持。您可以使用预定义的PPTX文件作为模板,然后在模板的基础上进行修改和生成新的演示文稿。
-
python-com-pptx:这是一个用于操作PPT文件的Windows COM库。它可以与Microsoft PowerPoint应用程序进行交互,允许您通过Python脚本控制和修改PPT文件。
-
pptx2pdf:这个库用于将PPT文件转换为PDF格式。它依赖于LibreOffice来进行转换,因此需要确保系统中已安装LibreOffice。
这里是一个使用python-pptx库创建简单幻灯片的示例:
from pptx import Presentation# 创建一个新的PPT文件
presentation = Presentation()# 添加一张幻灯片
slide = presentation.slides.add_slide(presentation.slide_layouts[5])# 在幻灯片中添加标题和内容
title = slide.shapes.title
content = slide.placeholders[1]
title.text = "欢迎使用Python处理PPT"
content.text = "这是一个使用python-pptx库创建的演示文稿示例。"# 保存PPT文件
presentation.save("example.pptx")
请注意,您需要在运行脚本之前先安装相应的库。您可以使用pip来安装这些库:
pip install python-pptx
pip install python-pptx-template
pip install comtypes # 用于python-com-pptx
使用Python处理PPT文件有许多好处:
-
自动化:Python可以帮助您自动完成与PowerPoint有关的重复性任务,比如创建演示文稿、更新内容、添加幻灯片或格式化元素。这可以节省大量时间和精力。
-
灵活性:Python提供了许多可以操作PPT文件的库和模块,让您可以进行各种操作,包括读取、写入、修改和提取数据。
-
库支持:有特定的Python库,如
python-pptx,可以简化处理PowerPoint文件的复杂性,提供简单的API供开发人员使用。 -
定制化:使用Python,您可以根据动态数据或用户输入来定制PowerPoint演示文稿。例如,您可以将来自不同来源的数据合并到预先设计好的模板中,创建个性化的报告或演示文稿。
-
集成性:Python可以轻松与在数据分析、数据处理和报告流程中常用的其他工具和系统集成。这样,您可以将PPT生成与数据处理和分析结合起来,创建全面且有见地的演示文稿。
-
文本处理和数据提取:Python强大的文本处理能力使您可以从现有的PowerPoint演示文稿中提取信息。您可以搜索特定文本,从幻灯片中提取数据,甚至生成结构化数据以进行进一步的分析。
-
协作:使用Python处理PPT文件,您可以促进团队成员之间的协作,使他们可以以编程方式生成和更新演示文稿,减少手动错误并确保一致性。
-
跨平台:Python是一种跨平台语言,这意味着您的PPT处理脚本可以在不同的操作系统上运行,提供了灵活性和便捷性。
-
节省成本:Python是一种开源语言,用于PPT处理的库也是免费提供的。这使得Python成为处理PowerPoint文件的一种经济高效的解决方案。
总的来说,Python的简单性、丰富的库支持和自动化任务的能力使其成为处理PowerPoint文件的优秀选择,无论您是想自动化演示文稿、从幻灯片中分析数据还是生成动态报告。
二、批量生成PPT版荣誉证书
技术工具:
Python版本:3.9
代码编辑器:jupyter notebook
每到学期末,幼儿园的小朋友除了让家长带上床上用品等回家,还有一张“好孩子”的“荣誉证书”。这个不像大朋友或者成人的荣誉证书,必须是通过激烈竞争而只有少数人才能获得的。这个可是人手一份的,大家都是“好孩子”。如果有小朋友没有拿到这个荣誉证书,家长和小孩子可不愿意了,非得找老师理论不可,哈哈。朋友所在的幼儿园每学期都要搞这个事情,整个幼儿园近400份荣誉证书,一个一个填写,专人要填几天。这不,这次园长让朋友来填,真愁死人了!于是朋友跑来亲切地询问我是否可以代劳。好吧,朋友相求,必须拍胸脯保证行啊。
此处,需要用到第三方库`pptx`。这个是专门用来创建和修改PPT幻灯片的库(PPT文件必须是.pptx为后缀的)。我们先安装这个库,步骤如下:
1. Windows徽标键+字母键R,输入"cmd”运行命令输入窗口

2. 输入"pip install python-pptx",耐心等待下载及安装

有时候网络太差,下载到中途会崩溃,也可以直接去这个库所在的网站(https://pypi.org/project/python-pptx/#files )用迅雷下载到本地盘,再安装。比如我将这个下载好的压缩文件解压到E盘,然后打开运行cmd,输入"E:"进入E盘,再输入"cd python-pptx-0.6.18"进入其所在文件夹,最后输入"python setup.py install"进行安装。

如下是安装完成的提示,然后就可以使用了。

首先,需要在幻灯片母版的第一个版式中设置好模板,以便后面用程序调用:

此处,模板中插入了一张荣誉证书的背景图片,然后将文字部分分成了6个文本框(可根据实际情况灵活调整),在其中填入内容,设置好字体和字号。
在power point软件中设置好模板之后,需要用程序读取一下模板中的文本框所对应的编号,即占位符(placeholder)的ID。由于PPT中一页幻灯片的占位符编号随着PPT的不断更改,不一定是按1,2,3这样的顺序排列的,只有读取一下才知道。
from pptx import Presentation
prs = Presentation('data\荣誉证书模板.pptx')
slide = prs.slides.add_slide(prs.slide_layouts[0]) # 第一个模板的第0个板式
for ph in slide.placeholders: #遍历这页PPT的所有占位符phf = ph.placeholder_format #获取占位符的格式print(phf.idx) #打印其ID编号ph.text = str(phf.idx)# 将编号写入PPT对应的位置中,以便后面一一对应
# 以上读取到占位符的ID方便后面调用
prs.save('data\荣誉证书模板-占位符编号.pptx')

以上,我们先导入安装好的`pptx`库中的`Presentation`(演示文稿/幻灯片)模块,然后打开对应路径下的PPT模板,并存入`prs`变量。然后通过`prs.slides.add_slide`以母版中的第一个模板新增1张幻灯片。模板的版式编号是从0开始的,所以第一个版式对应的是`[0]`。然后遍历这页PPT的所有占位符,获取其占位符的格式,存入`phf`变量。然后通过`phf.idx`打印其ID编号。如上,我们可以看到结果。随后通过`ph.text`将编号写入PPT对应的位置中,以便后面一一对应。由下图可见,其编号从上到下是10~15。

模板做好,占位符ID确定后,就需要读取幼儿园所有小朋友的班级和名字信息,然后写入了。小朋友的信息存在现有的Excel表格中,使用`openpyxl`库读取出来即可。下面就来读取吧。
from openpyxl import load_workbook
wb = load_workbook("data\名单.xlsx")
ws = wb.active
data={}
for row in range(2,ws.max_row+1):class_id = ws['A' + str(row)].valuename = ws['B' + str(row)].value data.setdefault(class_id,[])data[class_id].append(name)
data['小一'][:10]

以上,将名单中的班级和姓名信息按“班级”为键,“姓名”组成的列表为值存入字典`data`。通过`data['小一'][:10]`查看一下小一班前10个同学的数据。下面开始批量写入PPT。
import time
t0=time.time()# 程序开始运行的时间prs = Presentation('data\荣誉证书模板.pptx')
slide_layout = prs.slide_layouts[0] #调用设置好的母版,因为是母版的第一版式,所以取[0]
for class_id in data:for name in data[class_id]:slide = prs.slides.add_slide(slide_layout) #以母版的版式为基础新增一页幻灯片#往幻灯片中写入内容slide.placeholders[10].text = "{} 班 {} 同学:".format(class_id,name) #此处是班级和姓名slide.placeholders[11].text = "在2019-2020学年度第一学期获得"slide.placeholders[12].text = "“好孩子”称号。"slide.placeholders[13].text = "特发此证,以资鼓励。"slide.placeholders[14].text = "市幼儿园"slide.placeholders[15].text = "2020年1月"
prs.save('data\荣誉证书(总).pptx')
t1 = time.time()print('程序用时:',str(round(t1-t0))+'秒。')

400名小朋友的奖状只用了8秒钟写完。以上,通过`for`循环先获取班级,然后第二个`for`循环获取该班级下面对应的姓名,对于每个姓名,通过`prs.slides.add_slide`新建一页幻灯片,然后按我们先前获取的占位符ID,写入内容。除了班级和姓名,其它都是固定的内容。写入完成后,保存打印即可。而且PPT里是按班级排序的,这样每个班级的荣誉证书在打印后会集中在一起,方便区分。

三、往期推荐
Python提取pdf中的表格数据(附实战案例)
使用Python自动发送邮件
Python操作ppt和pdf基础
Python操作word基础
Python操作excel基础
使用Python一键提取PDF中的表格到Excel
相关文章:
【办公自动化】使用Python批量生成PPT版荣誉证书
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
【C++深入浅出】初识C++中篇(引用、内联函数)
目录 一. 前言 二. 引用 2.1 引用的概念 2.2 引用的使用 2.3 引用的特性 2.4 常引用 2.5 引用的使用场景 2.6 传值、传引用效率比较 2.7 引用和指针的区别 三. 内联函数 3.1 内联函数的概念 3.2 内联函数的特性 一. 前言 上期说道,C是在C的基础之上&…...
前端:VUE2中的父子传值
文章目录 一、背景什么是父子传值二、业务场景子传父1、在父页面中引入子页面2、子传父:父组件标识3、子传父:子组件标识 父传子父组件调用子组件中的方法 总结: 一、背景 最近做项目中需要使用到流工作,在这里流工作需要用到父子…...
【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布
目录 8 网络编程 8.1 使用PyQt 网络模块进行网络通信 服务器端示例 客户端示例 8.2 处理网络请求和响应 9 打包和发布 9.1 创建可执行文件或安装程序 9.2 解决依赖问题 9.3 发布 PyQt 应用到不同平台 9.3.1 发布到 Windows 9.3.2 发布到 macOS 9.3.3 发布到 Linux 9…...
Redis——set类型详解
概要 Set(集合),将一些有关联的数据放到一起,集合中的元素是无序的,并且集合中的元素是不能重复的 之前介绍的list就是有序的,对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表,而对于集合…...
redis---》高级用法之慢查询/pipline与事务/发布订阅/bitmap位图/HyperLogLog/GEO地理位置信息/持久化
高级用法之慢查询 # 配置一个时间,如果查询时间超过了我们设置的时间,我们就认为这是一个慢查询 # 配置的慢查询,只在命令执行阶段# 慢查询演示-设置慢查询---》只要超过某个时间的命令---》都会保存起来# 设置记录所有命令CONFIG SET slowl…...
Find My资讯|苹果Vision Pro开发者需将设备配对 AirTag
最近苹果Vision Pro获开发者申请,苹果要求获批的申请者使用 Measure and Fit 应用确认合适的佩戴尺寸,并会根据申请者提交的信息,定制不同的 Vision Pro 开发者套件,以便于契合申请者的面部特征,提供更好的佩戴体验。 …...
Go 语言中排序的 3 种方法
原文链接: Go 语言中排序的 3 种方法 在写代码过程中,排序是经常会遇到的需求,本文会介绍三种常用的方法。 废话不多说,下面正文开始。 使用标准库 根据场景直接使用标准库中的方法,比如: sort.Intsso…...
12----Emoji表情
本节我们主要讲解markdown的Emoji 在 Markdown 里使用 Emoji 表情有两种方法:一种是直接输入 Emoji 表情,另一种是使用 Emoji 表情短码(emoji shartcodes)。 一、打印方式: 直接输入 Emoji 表情:在 Markdown 中,可以直接输入 Em…...
C++四种强制类型转换
一、C强制转换与C强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2c除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cas…...
git仓库新建上传记录
新建git仓会出现版本分支问题,解决过程: 其他的前期绑定之类的传送:https://blog.csdn.net/qq_37194189/article/details/130767397 大概思路:新建一个分支,上传,合并,删除分支 git branch …...
flutter调用so
lutter是一种基于Dart语言的跨平台开发框架,通常用于开发Android和iOS应用程序。如果您想要在Flutter应用程序中调用一个SO库,您可以按照以下步骤进行操作: 首先,将您的SO库文件复制到Flutter项目的“lib”目录下。 接下来&…...
c#依赖注入
依赖注入(Dependency Injection,简称 DI)是一种设计模式,用于将对象的创建和管理责任从使用它的类中分离出来,从而实现松耦合和易于测试的代码。在 C# 中,依赖注入通常通过以下方式实现: 构造函数注入(Constructor Injection): 这是最常见的依赖注入方式,通过类的构…...
Django框架使用定时器-APScheduler实现定时任务:django实现简单的定时任务
一、系统环境依赖 系统:windows10 python: python3.9.0 djnago3.2.0 APScheduler3.10.1 二、django项目配置 1、创建utils包,在包里面创建schedulers包 utils/schedulers/task.py #1、设置 Django 环境,就可以导入项目的模型类这些了 …...
Go学习笔记之数据类型
文章目录 GO数据类型数组array切片slice集合map结构体make和new GO数据类型 在go语言中,定义的全局数据结构不使用不会报错,定义的局部数据结构必须使用,否则报错;建议定义的数据类型就要使用,要么不定义。 数组array …...
Spring Cloud 微服务
前言 Spring Cloud 中的所有子项目都依赖Spring Boot框架,所以Spring Boot 框架的版本号和Spring CLoud的版本号之间也存在以来及兼容关系。 Spring Cloud生态下的服务治理的解决方案主要有两个: Spring Cloud Netfix 和 Spring Cloud Alibaba。这两个…...
SpringBoot属性配置
SpringBoot提供了多种属性配置方式 application.properties server.port80 application.yml server:port: 81application.yaml server:port: 82SpringBoot配置文件加载顺序 application.properties > application.yml > application.yaml常用配置文件种类 application.…...
算法通关村第十关 | 归并排序
1. 归并排序原理 归并排序(MERARE-SORT)简单来说就是将大的序列先视为若干个比较小的数组,分成比较小的结构,然后是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分就是将问题分成一些小的问题分…...
SpringBoot3集成Kafka
标签:Kafka3.Kafka-eagle3; 一、简介 Kafka是一个开源的分布式事件流平台,常被用于高性能数据管道、流分析、数据集成和关键任务应用,基于Zookeeper协调的处理平台,也是一种消息系统,具有更好的吞吐量、内…...
css学习1
1、样式定义如何显示元素。 2、样式通常保存至外部的css文件中。 3、样式可以使内容与表现分离。 4、css主要有两部分组成:选择器与一条或多条声明。 选择器通常为要改变的html元素,每条声明由一个属性和一个值组成。每个属性有一个值,属性…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
