Python自动化办公:pptx篇

文章目录

  • 简介
  • 能做什么
  • PPT要素介绍
  • 官方demo
  • 高阶引申
  • 参考文献

202201笔记迁移

简介

python-pptx包是用来自动化处理ppt的。

使用的第一步是安装

pip install python-pptx

相比python-docx,python-pptx的使用更为麻烦一些,原因有很多,比如说,正常人不会在docx里花里胡哨调格式,但是pptx则正好相反。

能做什么

读取/修改已有PPT内的内容,从0开始创建一个新的PPT,并可以实现所有你平时手动做的所有内容,甚至如果你不怕麻烦的话,你还可以用它生成图表,修改图表数据。

PPT要素介绍

在使用python操作PPT之前,首先要清楚PPT的结构,以便于后续更好的理解代码的编写。

所以直接从网上download了一张图:

在这里插入图片描述

有这么几个比较重要的要素:

Presentation:即PPT对象,类似docx中的Document对象;

Slide:即幻灯片页,每一张幻灯片就是一个Slide对象。可以说,一个Presentation对象是由一堆Slide对象组成的。

Shape:即内容框,一个Slide对象是由一堆Shape对象组成的;

Paragraph:从某种意义上来讲,每个shape有点像是自成一个docx文档,因为每个Shape由一堆Paragraph组成,而Paragraph又是由一堆run组成。

run:见上。对run块的理解,可以参考之前在python-docx一文中对run的介绍;

Placeholder:即占位符,算是幻灯片母版中的一个概念,你生成一个空白幻灯片之后,总会出现“单击此处添加文本”之类的,这些方框就被叫做占位符,按照我的理解,其实就是一些特殊的Shape。(后来在官方文档里也看到了这样的描述,即A placeholder is a shape¶)

在这里插入图片描述

官方demo

老规矩,还是从官方demo的基础上做介绍。

简单生成一页PPT:

from pptx import Presentation# 生成ppt对象
prs = Presentation()
# 生成幻灯片样式对象,slide_layouts是母版样式,索引表示选择第几个母版样式
title_slide_layout = prs.slide_layouts[0]
# 基于所选择的样式对象,生成一个slide(幻灯片页)
slide = prs.slides.add_slide(title_slide_layout)# 取出该slide的标题对象
title = slide.shapes.title
# 取出索引为1的占位符对象,第0个占位符对象其实就是上面的title对象
subtitle = slide.placeholders[1]
# 为其文本属性赋值
title.text = "Hello, World!"
subtitle.text = "python-pptx was here!"# 保存文件
prs.save('test.pptx')

需要说一下母版样式slide_layouts,每个PPT默认带有11个母版版式,即:

在这里插入图片描述

可以在代码中用以下做验证:

# 一个空白的PPTX模板有多少个母版样式
print(len(prs.slide_layouts))

简单的已经过了,再上个稍微有点难度的。

高阶引申

如何查看占位符ID?
下面实例里,把每个占位符的ID等信息直接打在了text上。

from pptx import Presentationprs = Presentation()
# prs.slide_layouts[]表示的是ppt中不同的版式
slide = prs.slides.add_slide(prs.slide_layouts[0])
for shape in slide.placeholders:phf = shape.placeholder_formatprint(f"{phf.idx}--{shape.name}--{phf.type}")   # f表示字符串内支持大括号内的python表达式shape.text = f"{phf.idx}--{shape.name}--{phf.type}"prs.save('占位符.pptx')

怎么拿幻灯片页里的所有文字?

from pptx import Presentationprs = Presentation(path_to_presentation)# text_runs will be populated with a list of strings,
# one for each text run in presentation
text_runs = []for slide in prs.slides:for shape in slide.shapes:# 并不是所有的shape都有text_frame,所以如果你不想有exception的话,就需要手动check一下if not shape.has_text_frame:continuefor paragraph in shape.text_frame.paragraphs:for run in paragraph.runs:text_runs.append(run.text)

参考文献

  1. python-pptx官方文档
  2. python自动化办公手册之python操作PPT 不错的样例讲解
  3. python自动化办公——python操作Excel、Word、PDF集合大全 比较全面的样例讲解,唯一的问题是网页的黑色背景,感觉不是很好看哈哈哈哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/23027.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot与Vue前后端分离项目。用Nginx代理。

Nginx代理主要是解决跨域与负载均衡的作用。 我这里用的自己的电脑,用的windows系统,不过配置基本是和Linux一样的。 下载Nginx nginx: download Nginx常用命令,先cd到解文件夹路径: nginx.exe:开启服务。nginx -s…

数据可视化分析,2023结婚全品类消费趋势洞察报告

结婚消费与人们的关系密切相关。结婚是一个重要的人生事件,往往伴随着大量的消费。人们倾向于在婚礼仪式、婚纱摄影、宴会等方面进行豪华的投资,以展示社会地位和个人品味。此外,结婚还涉及到婚戒、婚庆、蜜月旅行等费用。然而,随…

LayUI之增删改查

目录 一、前言 1.1 前言 1.2 前端代码(数据表格组件) 1.3 封装JS 二、LayUI增删改查的后台代码 2.1 编写Dao方法 2.1 增加 2.2 删除 2.3 修改 三、LayUI增删改查的前端代码 3.1 增加 一、前言 1.1 前言 上一篇文章我们一起做了LayUI的动态添加选项卡,这一篇…

[SSM]MyBatis的缓存与逆向工程

目录 十三、MyBatis的缓存 13.1一级缓存 13.2二级缓存 13.3MyBatis集成EhCache 十四、MyBatis的逆向工程 14.1逆向工程配置与生成 14.2测试 十三、MyBatis的缓存 缓存:cache 缓存的作用:通过减少IO的方式,来提高程序的执行效率。 myb…

【C++】Eigen库实现最小二乘拟合

前言 入职第二周的任务是将导师的Python代码C化&#xff0c;发现Python中存在Numpy包直接调用np.polyfit就好了&#xff0c;但是C不存在需要造轮子。 #include <iostream> #include <cmath> #include <vector> #include <Eigen/QR> #include "x…

【STM32CubeIDE】 stm32f103的内部Flash读写,double数值读写

单片机stm32f103c8t6&#xff0c;程序存储器64Kb&#xff1a; 对其最后一页&#xff0c;第63页进行读写操作&#xff0c;空间1Kb。 写入一个32位的数据0x12345678到Flash首地址为0x0800FC00.则在Flash中存储情况如下&#xff1a; 即&#xff0c;低位地址存储数据的低位&#xf…

C# Linq 详解三

目录 概述 十三、Sum / Min / Max / Average 十四、Distinct 十五、Concat 十六、Join 十七、ToList 十八、ToArray 十九、ToDictionary C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Linq 详解二 1.OrderBy 2.O…

【优选算法题练习】day6

文章目录 一、76. 最小覆盖子串1.题目简介2.解题思路3.代码4.运行结果 二、704. 二分查找1.题目简介2.解题思路3.代码4.运行结果 三、34. 在排序数组中查找元素的第一个和最后一个位置1.题目简介2.解题思路3.代码4.运行结果 总结 一、76. 最小覆盖子串 1.题目简介 76. 最小覆…

拓宽“主航道”的Serverless与EDA领域,亚马逊云科技不断创新开拓

在新潮如走马灯般变换的时尚界&#xff0c;每隔几年就会刮起一阵复古风。被誉为“时尚教父”的著名设计师安德烈莱昂塔利曾说&#xff1a;“时尚总是在寻找新的灵感和方向&#xff0c;而复古是其中一个重要的来源。” 无独有偶。日新月异的高科技领域也会出现公认的“过时”…

单片机第一季:零基础6——按键

目录 1&#xff0c;独立按键 2&#xff0c;矩阵按键 &#xff08;注意&#xff1a;文章中的代码仅供参考学习&#xff0c;实际使用时要根据需要修改&#xff09; 1&#xff0c;独立按键 按键管脚两端距离长的表示默认是导通状态&#xff0c;距离短的默认是断开状态&#xf…

【监控系统】Prometheus监控组件Mysql-Exporter配置实战

Mysql-Exporter主要监控Mysql数据库的稳定性、吞吐量、连接情况、缓冲池使用情况、查询性能等各项指标&#xff0c;是我们压测时常常需要监控的一些指标。 目前&#xff0c;Exporter 支持高于5.6版本的 MySQL 和高于10.1版本的 MariaDB。在 MySQL/MariaDB 低于5.6版本时&#…

Jmeter接口关联(四)【使用正则表达式提取值】关联上下接口实际当中的运用

文章目录 前言一、Jmeter中正则表达式的运用&#xff08;使用案例讲解&#xff09;注意 前言 这篇主要是用一个实际的例子讲解正则表达式在2个有关联的接口中运用。 天气预报接口&#xff1a; 请求Key&#xff1a;79a35e2a5997710f3bdc86de81f21dbb 根据城市查询天气 接口地…