使用python-pptx操作PPT的示例详解
作者:肖永威 发布时间:2022-06-01 21:49:20
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,设计出合适的母版,供程序交互使用。
来源:https://blog.csdn.net/xiaoyw71/article/details/128639919
猜你喜欢
- 有过Web经验的人喜欢使用:<meta http-equiv="refresh" content="1;
- python烟花代码如下# -*- coding: utf-8 -*-import math, random,timeimport thre
- 使用Python编写探测WAF指纹脚本,再结合到Sqlmap中,这样以后再探测网站时,如果识别到此WAF指纹,就会显示出来。编写探测识别WA
- 测试字符串:<style>v\:* { BEHAVIOR: url(#default#VML) } o\:* { BEHAVIO
- 一、Pyecharts简介和安装1、简介Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的
- 在 MySQL 中,可以使用 ALTER TABLE 语句来添加表字段。以下是一些示例代码,可以批量添加多个字段:1 m
- 导入excel文件前言两种导入文件的方法:form表单和el-upload第一种方法:form表单一、文件上传的三要素是什么?文件上传的三要
- 你是否对获得MySQL数据库与表的最基本命令的实际操作感到十分头疼?如果是这样子的话,以下的文章将会给你相应的解决方案,以下的文
- 实现了宽度、高度、透明度的渐变,还能以高度宽度中点为中心,还扩展成以任意点为中心渐变(实例中以点击点为中心)。<!DOCTYPE ht
- 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Pe
- 修改字符串本身是不可能的,因为字符串是不可变类型,只能是通过某些方法来产生它的副本。再把副本赋值给原字符串,达到类似替换的作用。这里介绍几种
- 代码如下:<% set studentinstance = CreateStudent()&n
- 本文实例讲述了python中urllib模块用法。分享给大家供大家参考。具体分析如下:一、问题:近期公司项目的需求是根据客户提供的api,我
- PHP PDO连接连接是通过创建 PDO 基类的实例而建立的。不管使用哪种驱动程序,都是用 PDO 类名。连接到 MySQL<?php
- 1. glob文件名模式匹配尽管glob API很小,但这个模块的功能却很强大。只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可
- go语言中defer最主要的目的是在函数执行完毕后及时的释放资源入门案例package mainimport "fmt"
- <?php function genpage(&$sql,$page_size=10) { global $pages,$su
- python判断字符串的前两个字母是否是”id"你可以使用 Python 的字符串切片来判断一个字符串的前两个
- 企业最有价值的资产通常是其数据库中的客户或产品信息。因此,在这些企业中,数据库管理的一个重要部分就是保护这些数据免受外部攻击,及修复软/硬件
- 多继承以及MRO顺序1. 单独调用父类的方法# coding=utf-8print("******多继承使用类名.__init__