开发者

使用python-pptx操作PPT的示例详解

目录
  • 1. PPT基本结构在python-pptx下定义
    • 1.1. 演示文档结构定义
    • 1.2. 自定义幻灯片母版
  • 2. python-pptx操作PPT实践
    • 2.1. 安装python-pptx
    • 2.2. 读取PPT演示文档
    • 2.3. 基于模板创建新的演示文档
  • 3. 小结

    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.等。

    使用python-pptx操作PPT的示例详解

    图示演示文档,如下图所示,由3页幻灯片(slide)构成,其中,第三页幻灯片中的形状(shape)分别是&ldquUwMJYPo;标题 1”(Title 1)和“图片”(Picture Placeholder 2)组成。

    使用python-pptx操作PPT的示例详解

    1.2. 自定义幻灯片母版

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

    使用python-pptx操作PPT的示例详解

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

    使用python-pptx操作PPT的示例详解

    对于母版内容:

    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.jsplaceholder_format
        print(f'{phf.idx}--{shape.naUwMJYPme}www.devze.com--{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’,
    • &lsquo开发者_开发培训;height’,
    • ‘is_placeholder’,
    • ‘name’,
    • ‘part’,
    • ‘placeholder_format’,
    • ‘shape_id’,
    • ‘shape_type’,
    • ‘text’,
    • ‘text_frame’,
    • ‘top’,
    • ‘width’

    3. 小结

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

    以上就是使用python-pptx操作PPT的示例详解的详细内容,更多关于python-pptx操作PPT的资料请关注我们其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜