使用python-pptx创建PPT演示文档功能实践

news2025/1/19 3:46:03

python对PPT演示文档读写,是通过第三方库python-pptx实现的,python-pptx是用于创建和更新 PowerPoint(.pptx)文件的 Python 库。

关于PPT演示文档与幻灯片模板的内容不是本文的重点,在此略过。

1. PPT基本结构在python-pptx下定义

1.1. 演示文档结构定义

python-pptx对ppt结构的描述如下图所示,演示文档由多个幻灯片(slide)构成,每个幻灯片由众多各种形状(shape)组成。

  • Slide:幻灯片,就是演示文稿中每一页的页面。
  • Shape:形状,在每页幻灯片内插入的方框,可以是形状,也可以是文本框、图片、表格等等。
  • Run:文字块,一般为较少字符。
  • Paragraph:段落,通常有序号ㆍ、1.等。
    在这里插入图片描述
    图示演示文档,如下图所示,由3页幻灯片(slide)构成,其中,第三页幻灯片中的形状(shape)分别是“标题 1”(Title 1)和“图片”(Picture Placeholder 2)组成。
    在这里插入图片描述

1.2. 自定义幻灯片母版

使用程序生成演示文档,最好先自定义幻灯片母版,如下图所示,定义4页模板(slide_layouts)。
在这里插入图片描述

注意:shape名称在office软件下,是中文,而程序读出来的可能是英文!

在这里插入图片描述
对于母版内容:

  • Slides_layouts:版式,一个幻灯片母版由多个版式组成,索引从0开始。
    slide_layouts[]传入0表示获取的是第一个版式,传入1表示获取的是第二个版式

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

2. python-pptx操作PPT实践

2.1. 安装python-pptx

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

2.2. 读取PPT演示文档

from pptx import Presentation

# 打开演示文档
prs = Presentation('加油站全流程诊断大数据系统.pptx')
for slide in prs.slides:
    print(slide)

# 写入新文件中 
prs.save('test.pptx')

# 获取某一页Slide中的内容

for i, slide in enumerate(prs.slides):
    if i == 3:
        for shape in slide.shapes:
            if shape.has_text_frame:
                text_frame = shape.text_frame
                print(text_frame.text) 

2.3. 基于模板创建新的演示文档

这里所说模板仍然是pptx文件,不是PPT的模板(potx),python-pptx无法读取potx模板。也是说,使用仅有一页,并且无内容的空演示文档,内含自定义幻灯片母版,如前面所述的母版样例。

创建新演示文档过程如下:

  • 首先,修改首页内容,例如主题和副主题
  • 接着,按实际要求,使用具体模板,也就是slide_layouts

代码过程如下:

from pptx import Presentation
from PIL import Image

im=Image.open('d:\\02资料\\AI无感加油.png')

# 修改首页
prs= Presentation('template_1.pptx')
slide = prs.slides[0]
title = ['油站全流程诊断输出测试页',
        '测试页副标题']
for i, shape in enumerate(slide.shapes):
    if shape.has_text_frame:
        text_frame = shape.text_frame
        text_frame.text = title[i]

# 插入内容测试
slide = prs.slides.add_slide(prs.slide_layouts[1])  # 用第一个母版生成一页ppt
for shape in slide.placeholders:         # 获取这一页所有的占位符
    phf = shape.placeholder_format
    print(f'{phf.idx}--{shape.name}--{phf.type}')
    print('shape name ', shape.name)
    if shape.name ==  'Title 1':
        shape.text = f'目标'  #在标题占位符中填写“目标”
    else:
        shape.text = f'内容'  #在其他占位符中填写“内容”        
        
# 插入图片测试
im.save('tmp.png') #从外部(数据库)读取的图片,临时存储
slide = prs.slides.add_slide(prs.slide_layouts[2])  # 用第一个母版生成一页ppt
for shape in slide.placeholders:         # 获取这一页所有的占位符
    phf = shape.placeholder_format
    print(f'{phf.idx}--{shape.name}--{phf.type}')
    print('shape name ', shape.name)
    if shape.name ==  'Title 1':
        shape.text = f'插入图片测试'  #在标题占位符中填写“目标”
    else:
        shape.insert_picture('tmp.png')  #在其他占位符中填写“图片”
        
prs.save('向占位符内填写内容_1.pptx')

附加内容:列出对象属性。

for i, shape in enumerate(slide.shapes):
    print('对象类型', shape.shape_type)
    print('对象属性列表', dir(shape))

shape部分属性列表:

  • ‘has_chart’,
  • ‘has_table’,
  • ‘has_text_frame’,
  • ‘height’,
  • ‘is_placeholder’,
  • ‘name’,
  • ‘part’,
  • ‘placeholder_format’,
  • ‘shape_id’,
  • ‘shape_type’,
  • ‘text’,
  • ‘text_frame’,
  • ‘top’,
  • ‘width’

3. 小结

对于数据分析结果规范化输出,python-pptx功能基本满足,使用条件是精通PPT,设计出合适的母版,供程序交互使用。

参考:

牧文山. Python自动化办公 - 对PPT的操作(Python-pptx的基本使用). CSDN博客. 2022.03
python-pptx documentation
lsxxx2011. 详解 Python 操作 PPT 的各种骚操作!. 51CTO博客. 2022.08

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

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

相关文章

Sophus降维、升维与欧拉角、旋转向量的爱恨情仇

0. 简介 在面对二维与三维之间的转换时,我们常常会困惑该如何去转换,在G2O中存在有理想的坐标转换工具,但是在Sophus中却缺乏这样的手段。之前在Sophus处简要的介绍了一下SE(2)与SE(3)的转换,最近发现之前的文章这部分需要拿出来…

Leetcode:654. 最大二叉树(C++)

目录 问题描述: 实现代码与解析: 直接模拟(递归): 原理思路: 索引版本: 问题描述: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&a…

Thymeleaf从入门到清晰使用

文章目录什么是thymeleaf?第一个Thymeleaf程序Thymeleaf详解配置常用标签最后什么是thymeleaf? 模板引擎: 前端交给我们的页面,是html页面,如果是以前开发,我们需要把他们转成jsp页面,jsp的好处…

ABB AC500 系列 PLC 与上位机iFix 的通讯配置

ABB PLC IP 及 MODBUS TCP/IP 协议设置 通过 IP config tool 配置设备 IP 在 软件中,有 3 种方式可以进入 IP config tool 的配置界面  双击 IP_settings,点击 IP config tool,即可进入 IP config tool 界面 点击菜单栏的 Tool→IP confi…

k8s 微服务spring boot JVM 监控

目录 1.前言 1.1 JVM监控方案 1.2 接入操作步骤 2. 服务开启actuator prometheus监控 2.1 示例参考添加依赖 2.2 配置prometheus监控 3 配置 prometheus 监控 4 配置jvm grafana dashboard 1.前言 服务 部署环境 监控 spring-demo k8s v1.22 Prometheus Operator …

进程相关概念

1、什么是程序,什么是进程,有什么区别 程序是静态的概念。例如:gcc xxx.c -o pro,磁盘中生成pro文件,叫做程序(还未运行起来) 进程是程序的一次运行活动,也就是程序跑起来了&#xf…

【Linux】信号机制(非实时信号)

目录 前言 一.信号的概念以及产生 1.什么是信号 2.信号分为两类 3.查看信号的命令 4.信号如何产生 1).通过软件产生 2).通过硬件产生 3).通过键盘组合键产生 二.信号的发送以及保存 1.信号如何发送 2.信号如何保存 1).概念 2).底层实现结构&&内核中的实现…

WampServer服务器设置控件

WampServer服务器设置控件 WampServer是一个web开发环境,是一个用于Windows操作系统的类似服务器的软件,由Romain Bourdon构建。该工具允许您开始构建web应用程序,并在Windows上使用Apache服务器2、PHP编程语言和MySQL数据库在本地网络上启动…

java 实现 springboot项目 使用socket推送消息,前端实时进行接收后端推送的消息

1 后端 1.1 添加依赖 在我们的springboot项目里面&#xff0c;添加依赖&#xff1b; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.7.0</version>…

企业微信在职继承功能如何理解?怎么使用?

企业微信的在职继承功能就是企业管理员将在职员工的客户分配给其他在职员工跟进的一种方式&#xff0c;很方便&#xff0c;可以在工作出现变更时使用。 前言 企业微信之前的离职继承功能受到很多企业的青睐&#xff0c;企业能够将离职员工的客户分配给其他员工接手&#xff0c…

云天励飞在科创板获准注册:计划募资30亿元,陈宁为实际控制人

2023年1月10日&#xff0c;证监会发布公告&#xff0c;同意深圳云天励飞技术股份有限公司&#xff08;下称“云天励飞”&#xff09;首次公开发行股票注册。据贝多财经了解&#xff0c;云天励飞于2020年12月8日在科创板递交上市申请&#xff0c;2021年8月6日过会。 本次冲刺上市…

蓝队攻击的四个阶段(一)

蓝队的攻击是一项系统的工作&#xff0c;整个攻击过程是有章可循、科学合理的涵盖了从前期准备、攻击实施到靶标控制的各个步骤和环节。按照任务进度划分&#xff0c;一般可以将蓝队的工作分为4个阶段:准备工作、目标网情搜集、外网络向突破和内网横向拓展。第一阶段准备工作&a…

App开发提效法宝之插件技术

近年来技术革新频率越来越高&#xff0c;最近工作中经常有小伙伴问到插件技术的相关内容&#xff0c;今天就来跟大家系统的说清楚什么是插件技术以及它的好处。欢迎评论区交流哦&#xff01; 什么是插件技术&#xff1f; 插件技术指的是一种应用程序&#xff0c;遵循程序接口…

高温热水解预处理对厌氧消化期间污泥腐殖化的调控机制

期刊&#xff1a;Water Research 影响因子&#xff1a;9.13 发表时间&#xff1a;2022样本类型&#xff1a;污泥客户单位&#xff1a;同济大学凌恩生物客户同济大学发表在《Water Research》上的文章“The neglected effects of polysaccharide transformation on sludge humif…

振弦采集模块参数配置工具VMTool 的使用

振弦采集模块参数配置工具VMTool 的使用 准备工作 &#xff08; 1&#xff09; 将 VMXXX 模块的 UART_TTL、 RS232&#xff08; 或 RS485&#xff09; 接口与计算机的 COM 端口连接&#xff1b; &#xff08; 2&#xff09; 连接振弦传感器及温度传感器到 VMXXX 的对应接口&…

三菱FX3U系列PLC运动控制_伺服回原点的3种方法示例

三菱FX3U系列PLC运动控制_伺服回原点的3种方法示例 方法1: 运动的方向为圆形、环形、电机往一个方向转动; 只有一个原点开关,没有极限开关 如下图所示, 原点回归的方式为:启动回原点后,电机开始寻找原点开关,在找到原点开关的瞬间,开始减速;在离开原点开关的瞬间,电…

23. 反爬案例:不登录不给,要数据请先登录我的站点

登录之后&#xff0c;可以查看数据&#xff0c;是部分站点常用规则&#xff0c;本篇博客将在爬虫训练场中实现该需求。 文章目录安装必备模块建立 models建立 login_form 表单文件flask_wtf 中 FlaskForm 类建立登录视图函数配置 login.html 页面安装必备模块 实现 Python Fla…

Qt基于CTK Plugin Framework搭建插件框架--插件通信【事件监听】

文章目录一、前言二、事件三、类通信3.1、新建接收插件3.2、新建发送插件3.3、启用插件四、信号槽通信4.1、新建接收插件4.2、新建发送插件4.3、启用插件五、类通信和信号槽通信的区别六、插件依赖七、获取元数据一、前言 CTK框架中的事件监听&#xff0c;其实就是观察者模式&…

分享微信答题抽奖小程序制作步骤_可以做答题后抽奖活动吗

知识答题小程序如何制作&#xff1f;现在越来越多的企业和组织逐步进行各种获奖知识问答小程序。那么&#xff0c;如何制作一个答题小程序呢&#xff1f;今天&#xff0c;我们一起来看看~需要的老板不要走开哦~既然点进来了&#xff0c;那就请各位老板耐心看到最后吧~怎么做一个…

Linux工具学习之【git】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Whatever is worth doing is worth doing well. 任何值得去做的事情&#xff0…