Python自动化办公:pptx篇

news2024/11/18 22:51:31

文章目录

  • 简介
  • 能做什么
  • 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 Presentation

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

prs.save('占位符.pptx')

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

from pptx import Presentation

prs = 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:
            continue
        for 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.coloradmin.cn/o/756369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

波奇学Linux:make和Makefile

make和Makefile自动化构建并能决定源文件调用顺序,同时不必再写gcc命令 第一行依赖关系,第二行是tab键开头,是依赖方法 依赖关系:目标文件:依赖文件。 依赖方法:目标文件和依赖文件间的关系。 如果只有一条…

es下载历史的tar文件

第一步进入官网找到历史版本 第二步复制历史版本名称组合成下面的链接 直接get访问下载。如下链接所示只需要修改7.3.0这个版本号 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz

ChatGLM使用记录

ChatGLM ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存&#xff0…

opencv实战--角度测量和二维码条形码识别

文章目录 前言一、鼠标点击的角度测量二、二维码条形码识别 前言 一、鼠标点击的角度测量 首先导入一个带有角度的照片 然后下面的代码注册了一个鼠标按下的回调函数, 还有一个点的数列,鼠标事件为按下的时候就记录点,并画出点,…

uniapp微信小程序上传体积压缩包过大分包操作和上传时遇到代码质量未通过问题

1:首先我们得从项目最初阶段就得考虑项目是否要进行分包操作,如果得分包,我们应该创建一个与pages同级的文件夹,命名可以随意 2:第二部我们将需要分包的文件和页面放到分包文件夹里面subpage,这里我们得注意&#xff…

Python基础语法第三章之顺序循环条件

目录 一、顺序语句 二、条件语句 2.1什么是条件语句 2.2语法格式 2.2.1 if 2.2.2if - else 2.2.3if - elif - else 2.3缩进和代码块 2.4闰年的判断练习 2.5空语句 pass 三、循环语句 3.1while 循环 3.1.1代码示例练习 3.2 for 循环 ​3.3 continue 3.4 break 一…

给LLM装上知识:从LLM+LangChain的本地知识库问答到LLM与知识图谱的结合

前言 过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT plus版集成了bing搜…

linux常用工具介绍

文章目录 前言目录文件查看ls1、查看详细信息(文件大小用K、M等显示)2、按照文件创建时间排序(常在查看日志时使用) sort1、排序数字 df 、du1、查看目录的大小2、查看目录 从大到小排序 显示前n个3、查看磁盘使用情况 tailf一些目…

银河麒麟高级服务器操作系统V10安装mysql数据库

一、安装前 1.检查是否已经安装mysql rpm -qa | grep mysql2.将查询出的包卸载掉 rpm -e --nodeps 文件名3.将/usr/lib64/libLLVM-7.so删除 rm -rf /usr/lib64/libLLVM-7.so4.检查删除结果 rpm -qa | grep mysql5.搜索残余文件 whereis mysql6.删除残余文件 rm -rf /usr/b…

怎么用二维码做企业介绍?企业宣传二维码2种制作方法

怎么做一个企业推广二维码呢?现在制作二维码来做宣传推广是常用的一种方式,一般需要包含企业介绍、工作环境、产品简介、宣传视频、公司地址等等方面内容,那么企业介绍二维码该如何制作?下面给大家分享一下使用二维码编辑器&#…

EventBus详解

目录 1 EventBus 简介简介角色关系图四种线程模型 2.EventBus使用步骤添加依赖注册解注册创建消息类发送消息接收消息粘性事件发送消息 使用postStick()接受消息 3 EventBus做通信优点4 源码getDefault()register()findSubscriberMethods方法findUsingReflection方法findUsingR…

前端部署项目,经常会出现下载完 node 或者 npm 运行时候发现,提示找不到

1. 首先要在下载时候选择要下载的路径,不能下载完后,再拖拽到其他文件夹,那样就会因为下载路径和当前路径不一致,导致找不到相关变量。 2. 所以一开始就要在下载时候确定要存放的路径,然后如果运行报错,就…

【Java基础教程】(十三)面向对象篇 · 第七讲:继承性详解——继承概念及其限制,方法覆写和属性覆盖,关键字super的魔力~

Java基础教程之面向对象 第七讲 本节学习目标1️⃣ 继承性1.1 继承的限制 2️⃣ 覆写2.1 方法的覆写2.2 属性的覆盖2.3 关键字 this与 super的区别 3️⃣ 继承案例3.1 开发数组的父类3.2 开发排序类3.3 开发反转类 🌾 总结 本节学习目标 掌握继承性的主要作用、实…

git指令记录

参考博客(侵权删):关于Git这一篇就够了_17岁boy想当攻城狮的博客-CSDN博客 Git工作区介绍_git 工作区_xyzso1z的博客-CSDN博客 git commit 命令详解_gitcommit_辰风沐阳的博客-CSDN博客 本博客只作为自己的学习记录,无商业用途&…

计算机存储设备

缓存为啥比内存快 内存使用 DRAM 来存储数据的、也就是动态随机存储器。内部使用 MOS 和一个电容来存储。 需要不停地给它刷新、保持它的状态、要是不刷新、数据就丢掉了、所以叫动态 、DRAM 缓存使用 SRAM 来存储数据、使用多个晶体管(比如6个)就是为了存储1比特 内存编码…

【python】python全国数据人均消费数据分析(代码+报告+数据)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 &#x…

bio、nio、aio、io多路复用

BIO-同步阻塞IO NIO-同步非阻塞IO 不断的重复发起IO系统调用,这种不断的轮询,将会不断地询问内核,这将占用大量的 CPU 时间,系统资源利用率较低 IO多路复用模型-异步阻塞IO IO多路复用模型,就是通过一种新的系统调用&a…

前端开发者都应知道的 网站

1、ransform.tools 地址:transform.tools/ transform.tools 是一个网站,它可以让你转换几乎所有的东西,比如将HTML转换为JSX,JavaScript转换为JSON,CSS转换为JS对象等等。当我需要转换任何东西时,它真的帮…

Java反射机制概述

Java反射的概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一…

PyTorch: 池化-线性-激活函数层

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 nn网络层-池化-线性-激活函数层池化层最大池化:nn.MaxPool2d()nn.AvgPool2d()nn.MaxUnpool2d()线性层激…