通过python-pptx模块操作ppt文件的方法


Posted in Python onDecember 26, 2020

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

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

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

1. presentations, 表示整个ppt文档

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

3. shapes

4. placeholders

上述分类对应的常用操作如下

1. presentations

用于打开,创建,保存ppt文档,用法如下

>>> from pptx import Presentation
# 创建新的ppt文档
>>> prs = Presentation()
# 打开一个ppt文档
>>> prs = Presentation('input.pptx')
# 保存ppt文档
>>> prs.save('test.pptx')

2. slides

在创建一页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的用法如下

>>> title_slide_layout = prs.slide_layouts[0]
>>> slide = prs.slides.add_slide(title_slide_layout)

3. shapes

shapes表示容器,在制作ppt时,各种基本元素,比如文本框,表格,图片等都占据了ppt的一个部分,或者矩形区域,或者其他各种自定义的形状。shapes表示所有基本元素的和, 通过如下方式来访问对应的shapes

shapes = slide.shapes

对于shapes而言,我们可以获取和设置其各种属性,比如最常用的text属性,用法如下

>>> shapes.text = 'hello world'

还可以通过add系列方法来添加各种元素,添加文本框的方法如下

>>> from pptx.util import Inches, Pt
>>> left = top = width = height = Inches(1)
>>> txBox = slide.shapes.add_textbox(left, top, width, height)
>>> tf = txBox.text_frame
>>> tf.text = "first paragraph"
>>> p = tf.add_paragraph()
>>> p.text = "second paragraph"

添加表格的方法如下

>>> 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
>>> 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'

4. placeholders

shapes表示所有基本元素的总和,而placeholders则表示每一个具体的元素,所以placeholders是shapes的子集, 通过数字下标来访问对应的placeholder,用法如下

>>> slide.placeholders[1]
<pptx.shapes.placeholder.SlidePlaceholder object at 0x03F73A90>
>>> slide.placeholders[1].placeholder_format.idx
1
>>> slide.placeholders[1].name
'Subtitle 2'

placeholders是页面上已有的元素,获取对应的placeholders之后,可以通过insert系列方法来向其中新添元素。

了解上述层级结构,有助于我们对ppt的读写操作。除了写操作之外,也可以通过读操作来批量提取ppt中的特定元素,以文字为例,提取方式如下

from pptx import Presentation
 
prs = Presentation(path_to_presentation)
 
text_runs = []
 
for slide in prs.slides:
 for shape in slide.shapes:
  if not shape.has_text_frame:
   continue
  for paragraph in shape.text_frame.paragraphs:
   for run in paragraph.runs:
    text_runs.append(run.text)

通过该模块,可以快速搭建ppt的基本框架,也可以批量提取ppt中的特定元素,比如提取文字转换成word, 或者提取表格转换成excel文件。总而言之,该模块适合替代大量繁琐的人工复制粘贴操作。

到此这篇关于通过python-pptx模块操作ppt文件的方法的文章就介绍到这了,更多相关python-pptx模块操作ppt文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用python统计文件行数示例分享
Feb 21 Python
Python发送Email方法实例
Aug 21 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
python中join()方法介绍
Oct 11 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
Python读写压缩文件的方法
Jul 30 Python
Pytest中conftest.py的用法
Jun 27 Python
Python如何实现感知器的逻辑电路
Dec 25 #Python
使用Python实现音频双通道分离
Dec 25 #Python
Python用户自定义异常的实现
Dec 25 #Python
Django前后端分离csrf token获取方式
Dec 25 #Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 #Python
python语言time库和datetime库基本使用详解
Dec 25 #Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 #Python
You might like
PHP sprintf()函数用例解析
2011/05/18 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
python uuid模块使用实例
2015/04/08 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
python如何求解两数的最大公约数
2018/09/27 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
生日宴会答谢词
2014/01/09 职场文书
思想品德自我评价
2014/02/04 职场文书
体育教师自我鉴定
2014/02/12 职场文书
应届生找工作求职信
2014/06/24 职场文书
生物工程专业求职信
2014/09/03 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers