作者 | 陈熹

来源 | 早起Python

今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位——PPT。

安装

pptx是一个非标准库,需要在命令行中安装

pip install python-pptx

要注意,安装的时候是python-pptx,而实际调用时均为pptx。这里和docx模块相同。

前置知识

1. 基本结构

再看一下ppt结构组成,会较word复杂许多。当然这也跟ppt的高度自定义拓展性有关

简单来说,一个PPT文件为presentation,基本的结构为展示文件presentation-幻灯片页slide-形状shape组成,形状就需要区分开,是包含文本的形状还是不包含文本的形状(纯图片等)。

如果是包含文本的形状,则可以获取内部的文本框,一个文本框又可以看作是一个小的word文档,包含段落paragraph - 文字块run

现在对Office三件套的结构组成做一个小总结

2. 模板和占位符

如上图所示,通过幻灯片母版我们可以预设好各种各样的版式,后面新建幻灯片的时候只需要点击版式就可以一键生成所需的基本格式。

接着说说占位符Placeholder

占位符已经完成了样式设置,包括字体、字号、颜色等等,在特定占位符内输入文字可直接转化为特定的样式。

3. 创建 PPT 文件的基本思路

创建一个 PPT从幻灯片母版中确定一个版式在不同的占位符中填写不同的内容添加图片、表格等额外内容对样式进行修改

Python读取PPT

1.打开PPT文件

from pptx import Presentation# 这里给出需要打开的文件路径file_path = r'...'pptx = Presentation(file_path)

2. 获取幻灯片页

用pptx.slides可以获得一个列表,包括所有的幻灯片页slide 对象。

for slide in pptx.slides: print(slide)

3. 获取形状

只要熟悉了类似 Excel 和 Word 的多级结构, PPT 的结构就很好理解了。每一个幻灯片页都有一个或者多个形状shape。

for slide in pptx.slides: for shape in slide.shapes: print(shape)

4. 获取文本框内容

要获取文字内容,很容易就联系到文字在形状 shape 的下级结构了 从 Word 中的学习我们也可以推知,文字的承载单位是 段落 paragraph和文字块 run。

很自然可以想到用下列的代码获取文字。

for slide in pptx.slides: for shape in slide.shapes: for paragraph in shape.paragraphs: print(paragraph.text)或者

for slide in pptx.slides:for shape in slide.shapes:for paragraph in shape.paragraphs:for run in paragraph.runs:print(run.text)但这里出现了一个问题:每个形状里一定有文字吗?

从上图可以看到,蓝色椭圆的形状里是没有任何文字的,中间的大虚线框有文字。

一个形状中有没有文字,关键就在于它有没有包含文本框text_frame,下面是与文本框有关的操作:shape.has_text_frame 判断形状中是否有文字框shape.text_frame 获取文字内容

在PPT中,文字框才是文字的载体,因此获取文字的代码如下:

for slide in pptx.slides: for shape in slide.shapes: if shape.has_text_frame: text_frame = shape.text_frame print(text_frame.text)到这里,我们需要对先前对 PPT 结构的认识进行修正:

5. 获取段落和文字块

每一个文本框都可以看成是一个小的 Word 文件,里面有段落和文字块两级结构:

for slide in pptx.slides: for shape in slide.shapes: if shape.has_text_frame: text_frame = shape.text_frame for paragraph in text_frame.paragraphs: for run in paragraph.runs: print(run.text)

写入 PPT

创建全新 PPT 的代码可以类比创建 Word 文件的代码,实例化的过程中不给予具体路径则为创建空白文件。

1. 创建幻灯片页

其中占位符编号是区分占位符的依据,也是写入内容的依据。

2. 往占位符填写内容

指定占位符编号就可以在具体位置写入特定内容。

slide.placeholders[占位符编号].text = '...'

修改 PPT 样式

1. 段落样式修改

可以同python-docx模块对段落样式的导入进行类比。

具体的方法上二者也有很多相似:

.add_run:添加新的文字块.line_spacing:段内行间距.runs :段落内的所有文字块.space_after :段后距.space_before :段前距

2. 文字样式修改

文字样式方法和 Word 中的使用是相同的:

.font.name :字体名称.font.bold :是否加粗.font.italic :是否斜体.font.color :字体颜色.font.size:字体大小但有一个地方需要加以区别:在python-pptx中,使用文字样式方法是基于段落,也就是paragraph.font.xxxx, 而在python-docx中,使用文字样式方法是基于文字块。

以就是对 python-pptx模块操作PPT的常见方法总结,处理日常办公绝对没有问题,更多详细的代码可以查阅官方文档。

学完了这篇Python操作PPT之后,有关Python操作Word、Excel、PPT、PDF的基础就全部讲解完毕,之后我们会继续更新使用这些工具实现自动化办公的案例,如果你还不知道具体该如何应用,下面这些案例可能会有所帮助:

Python办公自动化从PPT到WordPython办公自动化从Word到ExcelPython办公自动化从Excel到Word

关于python的ppt_用Python玩转PPT相关推荐

  1. python自动化ppt_老男孩Python自动化开发12期完整精华版(含作业代码课件)

    [课程内容] 第1章: 开课介绍 同学互相介绍 Python简史介绍 python3的新特性 开发工具ide介绍 helloworld程序 变量与赋值 用户交互 条件判断与缩进 循环控制 循环次数限制 ...

  2. python 经典ppt_用Python玩转PPT!

    再看一下ppt结构组成,会较word复杂许多.当然这也跟ppt的高度自定义拓展性有关 简单来说,一个PPT文件为presentation,基本的结构为展示文件presentation-幻灯片页slid ...

  3. python生成ppt_实战 | Python自动生成PPT分析报告

    数据需求:调研数据,包括但不仅限于 问卷星原始数据. 问卷网原始数据 主要功能1: 自动生成概述性质的报告(ppt格式,针对每道题目给出频数统计,并绘制ppt图表) 主要功能2:自动交叉分析,并生成报 ...

  4. python 美化ppt_用python做ppt服务用于导入图片

    项目需要做WINFORM程序与powerpoint交互,把winform生成的图片自动拷贝到ppt中.目前使用python做了一个简单的服务解决.由于要求是32位程序,所以下面全都是32位的版本. 第 ...

  5. python 库函数ppt_《Python电子教案5-1 函数和代码复用》.ppt

    一个程序中的变量包括两类:全局变量和局部变量.全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效.局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在.例子如下. ...

  6. python数字滚动效果_玩转PPT数字滚动,让数据动起来

    大数据时代,各类数字充斥着我们生活的方方面面,相较传统印象中平面冷硬的形象,当下数字的展现已向可视化.多样化转变与流行.如何玩转数字,让数字"活"起来.动起来,是不少职场达人展示数 ...

  7. What?! Python一行代码,能玩这么多童年的游戏?

    来源 | 早起 Python 责编 | Carol 封图 |  CSDN 下载自视觉中国 儿童节就要来了,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一个私藏的GitHub项目--fre ...

  8. python编程小游戏-python趣味入门——写几个常玩的游戏

    文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...

  9. 【直播资料下载】Python 系列直播——深入Python与日志服务,玩转大规模数据分析处理实战第二讲...

    流畅的Python数据处理及大数据处理ETL Python 系列直播--深入Python与日志服务,玩转大规模数据分析处理实战 直播讲师:丁来强(成喆)--阿里高级技术专家,从事阿里云日志服务相关的产 ...

最新文章

  1. matlab rltool,基于Matlab工具箱Rltool的控制系统校正设计
  2. 高并发编程-02-创建多线程的7种方式
  3. 【MySQL随手记】一个踩坑记录:在安全更新模式下进行数据的修改与删除
  4. 机器学习 -- 信息论
  5. Anaconda3-5.3.0-Windows-x86_64
  6. html5控制符置于底层,HTML5占位符在焦点上消失
  7. html中删除代码怎么写,html空格代码怎么写?
  8. 经典面试题(44):以下代码将输出的结果是什么?
  9. CV新赛事:密集场景行人检测
  10. matlab分析机翼,基于Matlab对机翼断面下轮廓线的数值分析
  11. nginx里配置跨域
  12. 1152Google Recruitment
  13. android真实项目教程(三)——首页初点缀_by_CJJ
  14. [爬虫练习]爬取同程安全应急响应公开漏洞列表以及详情
  15. Android三级目录、ListView单选/GridView单选、ListView多选/GridView多选
  16. 微型计算机MC定义,mc是什么意思
  17. 选择并遮住工具(边缘调整工具)+剪切蒙版法,扣除头发丝
  18. 体验卓越品质 新贵Whql认证鼠标
  19. ubuntu16.04的HDMI没有输出不能外接显示器
  20. 如何用ajax实现页面自动刷新,Ajax实现页面自动刷新实例解析

热门文章

  1. Android基于讯飞AIUI的聊天Demo
  2. 星浩资本快速发展引擎:IT就是生产力
  3. 【云原生之K8s】 Pod基础概念
  4. carsin中创建相邻车道车辆插入场景设置
  5. 微信开发者工具报错Cannotreadpro ‘getPreloadAdUnitIds‘ of undefinedat Object.dK [as getPreloadAdUnitIds]
  6. 空间句法插件Axwoman 6.3安装教程
  7. narwal机器人_Narwal云鲸扫地机器人自清洗加压拖,省心省力省时
  8. linux cpu 查看微码,intel cpu微码 intel官网下的cpu微码 - 下载 - 搜珍网
  9. 检测局域网内在线IP
  10. Windows下db2数据库许可证过期解决方法