使用Python-pptx 告别繁琐的幻灯片制作

目录
  • Python自动化:python-pptx 批量生成幻灯片
    • 需求分析
    • python-pptx 介绍
    • python-pptx 安装
    • Hello World! 示例
    • 需求实现

Python自动化:python-pptx 批量生成幻灯片

需求分析

最近遇到了制作 PPT 报告的任务,前期收集整理后的表格数据长这样:

随后要基于上述数据制作 PPT 报告,几十页的幻灯片都是下图的格式:

Well, my coding fingers got quite itchy.

这种繁琐的手动制作幻灯片还是交给 Python 来自动完成吧!Python 中已有第三方库很好地支持 PowerPoint

python-pptx 介绍

python-pptx是用于创建和更新 PowerPoint(.pptx)文件的 Python 库。

其用途大致如下:

  • 典型的是从数据库内容生成自定义的可用于演示的工程状态报告,可通过单击 Web 应用程序中的链接下载该演示文稿。
  • 用于对演示文稿库进行批量更新。
  • 自动化制作对于人工操作繁琐的幻灯片。

由于开发团队的辛勤维护,目前已具有以下功能:

  • 打开、读取、创建、保存演示文稿(.pptx文件)
  • 添加幻灯片
  • 填充文本占位符,例如创建项目符号幻灯片
  • 添加图像并调整位置和尺寸
  • 添加文本框并调整文本的字体、大小和粗体
  • 添加表格
  • 添加形状,如多边形、流程图形状等
  • 添加图表,如柱形图、条形图、折线图和饼图等
  • 访问和修改元素属性,例如标题、主题等
  • ……(更多功能开发ing)

python-pptx 安装

python-pptx 托管在 PyPI 上,可以很方便地用 pip 安装:

pip install python-pptx
  • 支持 Python 2.6, 2.7, 3.3, 3.4, 3.6(测试 3.7 能正常安装和简单使用,是否会有使用异常尚未知)本文代码运行环境为 Python 3.6。
  • 依赖库会自动安装:lxml、Pillow、XlsxWriter

Hello World! 示例

成功安装后,运行以下示例代码,体验一下效果:

# 导包
from pptx import Presentation
# 创建空白演示文稿
prs = Presentation()
# 添加标题布局的幻灯片
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
# 设置标题和副标题
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Hello, World!"
subtitle.text = "python-pptx was here!"
# 保存
prs.save('test.pptx')

更多用例请移步Getting Started

后面有空我也会整理一下学习 python-pptx 的代码笔记

需求实现

有了 python-pptx 的加持,要实现文章一开始的需求就容易多了,简单分为以下几步:

  • 读取 Excel 数据(并预处理)—— 本例使用 pandas库读取 news.xlsx文件
  • 创建空白演示文稿(并添加封面幻灯片)
  • 依据数据循环添加幻灯片并设置文本格式(这一步是重点也是难点,详细说明参考代码注释)
  • 保存演示文稿
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pptx import Presentation
from pptx.util import Pt
import pandas as pd
class WritePowerPoint:
    def __init__(self, ppt_name, input_excel, title_cover, subtitle):
        self.ppt_name = ppt_name
        self.input_excel = input_excel
        self.title_cover = self.title_per_page = title_cover
        self.subtitle_cover = subtitle
        # 创建空白演示文稿
        self.prs = Presentation()
    def add_cover(self):
        # 添加封面布局幻灯片
        slide_layout_cover = self.prs.slide_layouts[0]
        slide = self.prs.slides.add_slide(slide_layout_cover)
        # 设置标题和副标题
        title = slide.shapes.title
        subtitle = slide.placeholders[1]
        title.text = self.title_cover
        subtitle.text = self.subtitle_cover
    def add_slide(self, line2_texts):
        # 添加布局5幻灯片
        slide_layout = self.prs.slide_layouts[5]
        slide = self.prs.slides.add_slide(slide_layout)
        shapes = slide.shapes
        # 设置标题:内容、位置、字体、大小等格式
        title_shape = shapes.title
        title_shape.text = self.title_per_page
        title_shape.left, title_shape.top = Pt(32), Pt(22)
        title_shape.width, title_shape.height = Pt(660), Pt(50)
        tf0 = title_shape.text_frame
        p0 = tf0.paragraphs[0]
        p0.font.name = '微软雅黑'
        p0.font.size = Pt(24)
        # 添加文本框
        left, top, width, height = Pt(32), Pt(82), Pt(665), Pt(396)
        text_box = slide.shapes.add_textbox(left, top, width, height)
        tf = text_box.text_frame
        def add_paragraph_texts(texts):
            print(texts[0])
            for i, text in enumerate(texts[:-1]):       # 最后的网址作为超链接
                p = tf.add_paragraph()
                p.text = text
                if i == len(texts) - 2:
                    run = p.add_run()
                    run.text = '查看更多'
                    run.hyperlink.address = texts[-1]   # 写入超链接
                    tf.add_paragraph()
        # 在文本框中添加内容
        for lst in line2_texts:
            add_paragraph_texts(lst)
    def run(self):
        # 读取 Excel 数据并进行预处理
        df = pd.read_excel(self.input_excel)
        df['发布机构'] = '发布机构:' + df['发布机构']
        df['发布时间'] = '发布时间:' + df['发布时间']
        df['关键词'] = '关键词:' + df['关键词']
        # 添加封面幻灯片
        self.add_cover()
        # 添加重复格式的幻灯片,每页写 2 条数据
        for i in df.index[::2]:
            self.add_slide([df.loc[i, :].tolist(), df.loc[i+1, :].tolist()])
        # 保存
        self.prs.save(self.ppt_name)
if __name__ == '__main__':
    wpt = WritePowerPoint('news.pptx', 'news.xlsx', 'News Briefs', '2020/4/5')
    wpt.run()

代码运行后便可得到若干页的 news.pptx:

代码中还可以加入更多的文本格式设置代码,美化幻灯片:

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

(0)

相关推荐

  • 利用Python制作PPT的完整步骤

    目录 前言 步骤1: 步骤2:安装PIP3 步骤3:安装python-pptx 4.写代码测试: 总结 前言 怎么,你还没学Python吗? 此一时彼以时,什么C,JAVA,现在在求职市场都是渣渣,铺天盖地的Python学习广告,一遍又一遍地提醒着着我,你已经老了: 老板说:你很努力,但我还是想提拔会Python的人. 员工说:自从学了Python,腰不疼了,腿不酸了,颈椎不痛了,连工资都涨了... 码农说:我要偷偷学Python,惊呆所有人! ...... 所以,为了不被时代滚滚洪流淘汰,争取

  • 使用python-pptx包批量修改ppt格式的实现

    最近实习需要对若干ppt进行格式上的调整,主要就是将标题的位置.对齐方式.字体等统一,人工修改又麻烦又容易错. 因此结合网上的pptx包资料,使用python脚本完成处理. 主要的坑点在于,shape的text_frame不能直接修改字体,甚至paragraph也不行,由于一个框里多个字体存在,它会报为"None",需要进一步去run层修改. from pptx import Presentation from pptx.enum.text import PP_ALIGN prs =

  • 通过python-pptx模块操作ppt文件的方法

    ppt通过其精美的可视化技巧以及良好的演示效果,成为了职场人士的必备技能.ppt的设计是一门大学问,无论是设计技巧,还是操作方法,都衍生出了专门的课程. 本文主要介绍python操作ppt的技巧,编程的优势在于处理速度,对于高大上的ppt设计,还是需要"以人为本", 所以该模块的使用场景主要是ppt基本元素的提取和添加,适合大量内容的转化,比如word转ppt, 减少大量繁琐的人工操作,尽管提供了一些基本的样式设计,但是并不能满足日常办公对ppt美观性的要求. 在该模块中,将ppt拆分

  • python生成ppt的方法

    本文主要介绍如何通过python生成ppt文件,以及借助ppt模板来生成ppt 环境 python 3 python-pptx 安装 pip3 install python-pptx 将文字输出到ppt 效果图 代码 from pptx import Presentation # 创建幻灯片 ------ prs = Presentation() title_slide_layout = prs.slide_layouts[0] slide = prs.slides.add_slide(titl

  • 使用Python-pptx 告别繁琐的幻灯片制作

    目录 Python自动化:python-pptx 批量生成幻灯片 需求分析 python-pptx 介绍 python-pptx 安装 Hello World! 示例 需求实现 Python自动化:python-pptx 批量生成幻灯片 需求分析 最近遇到了制作 PPT 报告的任务,前期收集整理后的表格数据长这样: 随后要基于上述数据制作 PPT 报告,几十页的幻灯片都是下图的格式: Well, my coding fingers got quite itchy. 这种繁琐的手动制作幻灯片还是交

  • 分享10篇优秀的jQuery幻灯片制作教程及应用案例

    幻灯片效果是常用的内容展示方式之一,这是一种在有限的网页空间内展示系列项目时非常好的方法.今天要给大家分享的是10篇非常棒的 jQuery 幻灯片教程及16个优秀的 jQuery 幻灯片应用案例. 10篇 jQuery 幻灯片制作教程Create Beautiful jQuery slider tutorial jQuery Plugin – Feature List Create an Image Rotator with Description (CSS/jQuery) Moving Box

  • 将python包发布到PyPI和制作whl文件方式

    wheel文件 Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容.按照官网说法,wheels是发行版Python的新标准并且要取代.egg. Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义. Wheel现在被认为是Python的二进制包的标准格式. 以下是Wheel和Egg的主要的不同点: Wheel有一个官方的PEP427来定义

  • python pptx复制指定页的ppt教程

    如题,我有一个模板,我想根据需求复制模板中间的某一页多次,比如复制第五页,然后复制3次,那么第六页,第七页,第八页都是和第五页一模一样的ppt,次数是根据我的需求指定的,使用python pptx模块复制,可是不知道有没有相应的方法能实现,我用以下方法行不通: prs = Presentation("Missed Assessment Rate Template.pptx") slide = prs.slides.add_slide(prs.slide_layouts[5]) prs.

  • python 使用MyQR和qrcode来制作二维码

    前言   今天下午无聊,突发奇想想玩玩二维码,于是就结合着上学期学的标识技术,用Python制作了一下二维码. 一.二维码   二维码( 2 − D i m e n s i o n a l (2-Dimensional(2−Dimensional B a r c o d e ) Barcode)Barcode),又称二维条形码.它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形来记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."

  • 基于Python实现射击小游戏的制作

    目录 1.游戏画面 1.1开始 1.2射击怪物 2.涉及知识点 3.代码 3.1发射声 3.2背景 3.3射击效果 4.经验总结 1.游戏画面 1.1开始 1.2射击怪物 2.涉及知识点 1.sprites 2.pygame混音器 3.图章 4.python基础语法 3.代码 3.1发射声 from sprites import * try: import pygame pygame.mixer.init() fire_sound = pygame.mixer.Sound("audio/发射声.

  • 使用Python的urllib和urllib2模块制作爬虫的实例教程

    urllib 学习python完基础,有些迷茫.眼睛一闭,一种空白的窒息源源不断而来.还是缺少练习,遂拿爬虫来练练手.学习完斯巴达python爬虫课程后,将心得整理如下,供后续翻看.整篇笔记主要分以下几个部分: 1.做一个简单的爬虫程序 2.小试牛刀--抓取百度贴吧图片 3.总结 1.做一个简单的爬虫程序 首先环境描述 Device: Mba 2012 Yosemite 10.10.1 Python: python 2.7.9 编辑器: Sublime Text 3 这个没有什么好说的,直接上代

  • python实现pptx批量向PPT中插入图片

    目录 项目背景 基础 加亿点点细节 最终代码 项目结果图 总结 项目背景 实验结果拍摄了一组图片,数量较大,想要按顺序组合排版,比较简单的方式是在PPT中插入图片进行排版.但是PPT批量插入图片后,顺序打乱且不显示图片名称,每个图片单独调整位置和大小费时费力,于是想到使用工具批量操作.过去了解过python自动化办公模块,相对来说python也是简单易用的语言,项目预计不会耗费太大精力,故尝试学习实践一番.(非专业学习笔记分享,望各位大佬不吝指导!) 数据为16组实验,每组实验重复两次,共32个

  • Docker制作Python运行环境基础镜像的方法步骤

    一.准备工作 1.1 Python安装包的下载(说明:python版本可根据自己需求更换) 官网下载:https://www.python.org/downloads/source/ 本地下载地址:64位:https://www.jb51.net/softs/416037.html 32位:https://www.jb51.net/softs/543679.html 1.2基础镜像Ubuntu16.04 DockerHub拉取 docker pull ubuntu:16.04 本地Ubuntu下

  • Python编程使用PyQt5制作动态钟表示例

    目录 前言 环境配置 实现思路 老式钟表制作 电子表制作 合并两表界面 核心代码 总结 前言 大家好,我是小张~ 记得小时候,家里只有一个钟表用来看时间(含有时针.分针.秒针的那种),挂在墙上哒哒哒响个不停,现在生活条件好了.基本人手一部手机,看时间也不再依靠表了,而今天的文章内容就是与这类钟表相关: 环境配置 程序中用到的Python包 PyQt5 math sys 实现思路 实现思路分为大致分为三个部分:老式钟表制作.电子表制作.两表合并为一个界面 老式钟表制作 整体来看老式钟表界面,有以下

随机推荐