PPT通过其精美的可视化技巧以及良好的演示效果,成为了职场人士的必备技能。PPT的设计是一门大学问,无论是设计技巧,还是操作方法,都衍生出了专门的课程。

主要介绍Python操作PPT的技巧,编程的优势在于处理速度,对于高大上的PPT设计,还是需要"以人为本,所以该模块的使用场景主要是PPT基本元素的提取和添加,适合大量内容的转化,比如word转PPT, 减少大量繁琐的人工操作,尽管提供了一些基本的样式设计,但是满足日常办公对PPT美观性的要求上还是差点意思。

安装模块

Windows用户打开命令行输入:pip install python-pptx

Mac用户打开终端/Terminal输入:pip3 install python-pptx

使用windows系统,如果出现无法安装情况,可以在cmd模式下输入网址选择国内清华镜像。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-pptx

导入模块:import pptx

参考文档地址:https://python-pptx.readthedocs.io/en/latest/index.html

PPT的基本结构介绍

在该模块中,将ppt拆分为了以下多个元素

  1. presentations, 表示整个ppt文档

  2. sliders. 表示ppt文档的每一页

  3. shapes 方框,在每页幻灯片内插入的方框,可以是形状,也可以是文本框

  4. Run 文字块 一般为较少字符

  5. Paragraph 段落,即Shape中的每一段内容,都称为一个段落

基本使用:

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches, Pt, Cmprs = Presentation()    #默认模板prs = Presentation(mypath)    #使用自己定义的模板

获取PPT内容

from pptx import Presentation
from pptx.util import Inches
# 1. 得到幻灯片对象
prs = Presentation("demo.pptx")
# 2. 获取prs对象中的每一页PPT
for slide in prs.slides:# 3. 遍历获取每页PPT中的内容for shape in slide.shapes: # 4. 打印具体的Shapeprint(shape)# 5. 我是一条华丽的分割线,划分不同的slideprint("——————————————————————————")

输出结果:

如果想获取每个Shape里面的文字也可以:

shape.has_text_frame ----->是否有文字 shape.text_frame ----->获取文字框

from pptx import Presentation
from pptx.util import Inches
# 1. 得到幻灯片对象
prs = Presentation("demo.pptx")
# 2. 获取prs对象中的每一页PPT
for slide in prs.slides:# 3. 遍历获取每页PPT中的内容for shape in slide.shapes: # 4. 判断是否存在文本if shape.has_text_frame:# 5. 如果存在则获取内容text_frame = shape.text_frameprint(text_frame.text)# 6. 我是一条华丽的分割线,划分不同的slideprint("——————————————————————————")

输出的结果(对比前面的幻灯片):

从shape中找paragraph

from pptx import Presentation
from pptx.util import Inches
# 1. 得到幻灯片对象
prs = Presentation("demo.pptx")
# 2. 获取prs对象中的每一页PPT
for slide in prs.slides:# 3. 遍历获取每页PPT中的内容for shape in slide.shapes: # 4. 判断是否存在文本if shape.has_text_frame:# 5. 获取shape中的文本text_frame = shape.text_frame# 6. 获取text_frame中的段落内容for paragraph in text_frame.paragraphs:# 7. 打印段落内容print(paragraph.text)print('----------paragraph------------')

综合应用

编写一个Python程序,要求

(1)打开demo.pptx

(2)按照paragraph分段,转换成为word文档

(3)保存为demo.docx

from pptx import Presentation
from docx import Documentdoc = Document()
prs = Presentation("婚礼策划师的最爱.pptx")
ls = []
for slide in prs.slides:for shape in slide.shapes:if shape.has_text_frame:text_frame = shape.text_framefor paragraph in text_frame.paragraphs:if paragraph.text != '':doc.add_paragraph(paragraph.text)doc.save("demo.docx")

向PPT写入内容

首先了解模板和占位符

Slides_layouts:版式,一个幻灯片母版由多个版式组成,索引从0开始。

Placeholder:占位符:存在PPT母版里面的幻灯片的某一部件:Placeholder

在创建一页ppt时,需要指定对应的布局,在该模块中, 内置了以下9种布局

  1. Title

  2. Title and Content

  3. Section Header

  4. Two Content

  5. Comparison

  6. Title Only

  7. Blank

  8. Content with Caption

  9. Picture with Caption

通过数字下标0到9来访问,指定布局添加一页ppt的用法如下:

创建placeholders

from pptx import Presentationprs = Presentation() #初始化一个空pptx文档
slide = prs.slides.add_slide(prs.slide_layouts[0])  # 用第一个母版生成一页ppt
for shape in slide.placeholders:         # 获取这一页所有的占位符phf = shape.placeholder_formatprint(f'{phf.idx}--{shape.name}--{phf.type}')  # id号--占位符形状名称-占位符的类型shape.text = f'{phf.idx}--{shape.name}--{phf.type}'
prs.save("new_template.pptx")

也可以一次添加多个

from pptx import Presentationprs = Presentation() #初始化一个空pptx文档
i = 0
while i <= 10:slide = prs.slides.add_slide(prs.slide_layouts[i])  i = i+1for shape in slide.placeholders:         # 获取这一页所有的占位符phf = shape.placeholder_formatprint(f'{phf.idx}--{shape.name}--{phf.type}')  # id号--占位符形状名称-占位符的类型shape.text = f'{phf.idx}--{shape.name}--{phf.type}'
prs.save("new_template.pptx")

向占位符中添加内容

主要使用:

shape.text = 字符串

prs.save(文件路径)

from pptx import Presentationprs = Presentation()
# 用第一个母版生成一页ppt
slide = prs.slides.add_slide(prs.slide_layouts[1])
# 获取当前页的标题
title_shape = slide.shapes.title
# 向标题中添加文本
title_shape.text = '宋宋的Python专栏'
# 获取副标题
subtitle = slide.shapes.placeholders[1]
# 副标题中添加文本
subtitle.text = '宋宋是一个爱美的大女生'# 副标题中添加新段落
new_paragraph1 = subtitle.text_frame.add_paragraph()
# 向段落中添加文本
new_paragraph1.text = '我是一个专注学习技术的大女生'
new_paragraph1.level = 1new_paragraph2 = subtitle.text_frame.add_paragraph()
new_paragraph2.text = '我是一个认真写文章的大女生哈哈哈'
new_paragraph2.level = 2# 保存内容
prs.save("写入内容1.pptx")

空白的PPT模板中添加文本框和图形

from pptx import Presentation
from pptx.util import Cm,Pt,Inches
from pptx.enum.shapes import MSO_SHAPEprs = Presentation('写入内容1.pptx')
slide = prs.slides.add_slide(prs.slide_layouts[6]) # 6的layout中是一个空白的Slider,里面没有占位符# 单独向里面添加文本框和图片
left = top = width = height =Cm(3)  # # left,top为相对位置,width,height为文本框大小。满足条件顺序是左>上>右>下
text_box = slide.shapes.add_textbox(left,top,width,height)
tf = text_box.text_frame
tf.text = "欢迎来到宋宋的Python专栏"p = tf.add_paragraph()
p.text = "宋宋的Python专栏,有20天学会Python基础,20天学会爬虫,20天学会数据分析,还有干活趣味文章!"
p.font.bold = True
p.font.size = Pt(15)# 添加图形slide1 = prs.slides.add_slide(prs.slide_layouts[6])
shapes = slide1.shapes
left = top = width = height = Inches(1.0)
shape = shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height)prs.save("写入内容1_new.pptx")

案例

现有一个公益捐书项目,有很多学生参与了本次活动,为了嘉奖这些学生,决定给每位学生发一张奖状。参与捐赠的学生名单和捐书数量都在students.xlsx中。

  1. 读取Excel中的数据

  2. 读取做好的PPT模板

  3. 将每位同学的姓名和捐书数量设置到PPT上

  4. 保存PPT

模版样式如下:

学生名单信息:

代码如下:

from pptx import Presentation
from pptx.util import Cm,Pt,Inches
from pptx.enum.shapes import MSO_SHAPE
from datetime import datetimefrom openpyxl import load_workbook# 1. 加载cosmetics.xlsx表格
workbook = load_workbook(filename= 'students.xlsx')
# 2. 得到Sheet1工作簿
sheet = workbook['Sheet1']# 按照行遍历,一行是一个人的信息
for row in sheet.iter_rows(min_row=2, max_row=8, min_col= 1,max_col=2):  # 涵盖范围的所有单元格都会显示prs = Presentation("模版.pptx")# 2. 获取prs对象中的每一页PPTfor slide in prs.slides:# 3. 遍历获取每页PPT中的内容for shape in slide.shapes: # 4. 判断是否存在文本if shape.has_text_frame:# 5. 获取shape中的文本text_frame = shape.text_frame# 6. 获取text_frame中的段落内容for paragraph in text_frame.paragraphs:paragraph.font.size = Pt(24)# 7. 打印段落内容if paragraph.text=='__':paragraph.text=row[0].valueif paragraph.text=='__册':paragraph.text=f'{row[1].value}册'if paragraph.text=='日期:':paragraph.font.size = Pt(18)paragraph.text=str(datetime.now().strftime('%Y年%m月%d日'))prs.save(f"模版_{row[0].value}.pptx")

-END-

想要学习更多技术,加下方小姐姐领取全套教程及源码笔记

用Python操作PPT的办公自动化教程相关推荐

  1. python实践答辩ppt_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶没压力!...

    看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶没压力!一.导读大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了

  2. python的ppt报告_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...

    一.导读 大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了 今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位--PPT. 二.安装 ...

  3. pptx库ppt演示 python_详解 Python 操作 PPT 的各种骚操作!

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍. 这里提前做一个说明:python操作PPT,最好是我们提前设 ...

  4. python自动化ppt_python自动化办公手册之python操作PPT

    原标题:python自动化办公手册之python操作PPT 前言 1)python自动化文档手册 python自动化文章一直深受广大python爱好者的青睐.基于此,我花了整整一周时间真理出来的pyt ...

  5. python控制ppt翻页_详解Python操作PPT的各种骚操作!

    1.python-pptx模块简介 使用python操作ppt,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍. 这里提前做一个说明:PythonPPT,最好是我们提前设计好 ...

  6. python操作ppt的模块_详解 Python 操作 PPT 的各种骚操作!

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍. 这里提前做一个说明:python操作PPT,最好是我们提前设 ...

  7. python自动化办公之python操作PPT

    python自动化文章一直深受广大python爱好者的青睐.基于此,我花了整整一周时间真理出来的python自动化文档手册,涉及到六个章节(如下图所示): ① python使用openpyxl操作ex ...

  8. python 操作ppt转换为pdf

    使用python操作ppt转换为pdf 最近拿到了一些加密的ppt文档,只能以只读的方式打开,所以就不能编辑了,也不能直接转换为pdf文档了,需要做一些转换了. 1. 需要使用WPS 2007版的(必 ...

  9. python中的p dml sel_详解 Python 操作 PPT 的各种骚操作!

    1.python-pptx模块简介 使用python操作PPT,需要使用的模块就是python-pptx,下面来对该模块做一个简单的介绍. 这里提前做一个说明:python操作PPT,最好是我们提前设 ...

  10. 史上最全的Python操作 “PPT” 文档大全,以后写“数据分析报告”靠她了!

    ↑↑↑关注后"星标"简说Python 人人都可以简单入门Python.爬虫.数据分析 简说Python严选 来源:数据分析与统计学之美    作者:黄伟呢 One old watc ...

最新文章

  1. Expo 快速开启之旅
  2. 乌云爆告之双十一电商的安全警示
  3. java正则表达式及api_JAVA常用API:正则表达式regular expression
  4. Ajax — 大事件项目(第一天)
  5. Java 8 Stream Api 中的 peek、map、foreach区别
  6. 博客主机_自动申请续期免费证书
  7. SQLServer DBA 三十问之我答(第7题)
  8. mysql 几个超时参数(timeout)解释
  9. 搭建php实验报告_php实验报告..doc
  10. mysql免安装版教程视频_MySQL免安装版安装教程
  11. 申请软件著作权步骤如下
  12. 《Spring Boot极简教程》第1章 Spring Boot史前简述
  13. 1688API接口工具
  14. 指针式仪表自动读数与识别(二):仪表图像预处理
  15. 常用ftp大全.txt
  16. go操作MongoDB
  17. 电脑开机密码忘记怎么办
  18. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器
  19. module.exports 和 exports 、export default 、export、require 、 inport 的区别
  20. opencv+海康摄像头,实现每秒获取摄像头拍摄视频的一帧图片

热门文章

  1. Abaqus学习笔记(基础)
  2. win7旗舰版上装VS2010错误(提示:miicrosoft 应用程序报告[安装失败])
  3. 每周公布病情 - 北京18区县均有手足口病例
  4. 省市区县街道地图json
  5. 大数据项目实战之数据采集
  6. 四叶草启动引导配置工具 !Clover Configurator中文版下载!
  7. 鸟哥的Linux私房菜_服务器架设篇 第三版
  8. AE动画导出json工具:bodymovin
  9. html input属性都有啥,input 属性有哪些input标签常用属性
  10. R2CNN 算法笔记