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

 更新时间:2023年06月21日 17:19:22   作者:肖永威  
这篇文章主要介绍了使用python-pptx创建PPT演示文档功能实践,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python通过WHL文件实现离线安装的操作详解

    Python通过WHL文件实现离线安装的操作详解

    在Python开发中,我们经常需要安装第三方库来扩展Python的功能,通常情况下,我们可以通过pip命令在线安装这些库,此时,WHL(Wheel)文件成为了非常实用的解决方案,本教程将结合实际案例,详细介绍如何通过WHL文件在Python中进行离线安装,需要的朋友可以参考下
    2024-08-08
  • 在pandas中一次性删除dataframe的多个列方法

    在pandas中一次性删除dataframe的多个列方法

    下面小编就为大家分享一篇在pandas中一次性删除dataframe的多个列方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Pandas中GroupBy具体用法详解

    Pandas中GroupBy具体用法详解

    pandas中的DF数据类型可以像数据库表格一样进行groupby操作。通常来说groupby操作可以分为三部分:分割数据,应用变换和和合并数据。本文就详细的来介绍一下,感兴趣的可以了解一下
    2021-07-07
  • python处理自动化任务之同时批量修改word里面的内容的方法

    python处理自动化任务之同时批量修改word里面的内容的方法

    在本篇文章里小编给各位整理的是一篇关于利用python处理自动化任务之同时批量修改word里面的内容的文章,需要的可以参考学习下。
    2019-08-08
  • python读写LMDB文件的方法

    python读写LMDB文件的方法

    这篇文章主要为大家详细介绍了python读写LMDB文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • python监控键盘输入实例代码

    python监控键盘输入实例代码

    这篇文章主要介绍了python监控键盘输入实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python-OpenCV实战:利用 KNN 算法识别手写数字

    Python-OpenCV实战:利用 KNN 算法识别手写数字

    K-最近邻(KNN)是监督学习中最简单的算法之一,KNN可用于分类和回归问题。本文将为大家介绍的是通过KNN算法实现识别手写数字。文中的示例代码介绍详细,需要的朋友可以参考一下
    2021-12-12
  • Python实现双进程防止单点故障实例深度探究

    Python实现双进程防止单点故障实例深度探究

    在分布式系统中,确保系统的高可用性是至关重要的,本文将深入探讨如何使用Python实现双进程自我保护机制,以应对单点故障,确保系统稳定运行,将通过详实的示例代码,介绍双进程自我保护的原理、实现步骤以及可能遇到的挑战
    2024-01-01
  • odoo 为可编辑列表视图字段搜索添加查询过滤条件的详细过程

    odoo 为可编辑列表视图字段搜索添加查询过滤条件的详细过程

    Odoo 是基于 Python 写的一系列开源商业应用程序套装,前身是 OpenERP,这篇文章主要介绍了odoo 为可编辑列表视图字段搜索添加查询过滤条件,需要的朋友可以参考下
    2023-02-02
  • 详解Python中的内建函数,可迭代对象,迭代器

    详解Python中的内建函数,可迭代对象,迭代器

    这篇文章主要介绍了Python内建函数,可迭代对象,迭代器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论