用 Python 制作 Powerpoint 演示文稿
admin
2023-07-30 22:59:37
0

简介

不管你爱不爱,Powerpoint都被广泛应用于商务场合。文章不会争辩Powerpoint的优点,而是向你展示如何用Python使创建Powerpoint幻灯片自动化,以便去除掉在使用Powerpoint过程中一些单调乏味的工作。

幸运的是,有一个优秀的用于创建和更新PowerPoint文件的Python库:python-pptx。该库的API非常详细,所以很容易使用。唯一棘手的部分是理解PowerPoint文档的结构,包括各种总体布局和元素。一旦你了解了基础知识,自动创建你自己的PowerPoint幻灯片会相对容易很多。本文将通过一个例子研究和分析一些pandas的Excel数据,创建一些可嵌入在PowerPoint文件里的图表。

PowerPoint文件的基础

Python-pptx可以创建空白PowerPoint文件,但大多数人会喜欢在一个根据自己的内容设定好的的模板上工作。Python-pptx的API支持这个预定义的过程并且非常简单,只要你知道关于你的模板的几件事就好了。

在深入一些代码示例之前,你需要了解两个关键部分:幻灯片布局占位符。在下面的图片你可以看到两种不同的布局以及模板占位符的一个例子,你可以把内容填充在其中。

在下面的图片中,你可以看到,我们使用的是布局0,在幻灯片的第一页有一个占位符。

 

这幅图中,我们使用了外观完全不同的布局1。

 

为了让您更轻松地使用自己的模板,我创建了一个简单的独立脚本,这个脚本使用一个模板,并用各种元素来标记这个模板。

我不会一行一行地解释下面的代码,但是你可以自己在github上看analyze_ppt.py,下面是完成主要工作的函数:

123456789101112131415161718192021222324252627 def analyze_ppt(input, output):    \”\”\” 读入文件并分析结构。    输出文件包含标记信息,使生成后面的PowerPoint模板更容易。    \”\”\”    prs = Presentation(input)    # 每个PowerPoint文件有多种布局    # 循环找出不同的元素位置    for index, _ in enumerate(prs.slide_layouts):        slide = prs.slides.add_slide(prs.slide_layouts[index])        # 不是每张幻灯片都有标题        try:            title = slide.shapes.title            title.text = \’Title for Layout {}\’.format(index)        except AttributeError:            print(\”No Title for Layout {}\”.format(index))        # 遍历所有占位符,并通过索引和类型识别它们         for shape in slide.placeholders:            if shape.is_placeholder:                phf = shape.placeholder_format                # 不要覆写仅仅是一个特殊占位符的标题                try:                    if \’Title\’ not in shape.text:                        shape.text = \’Placeholder index:{} type:{}\’.format(phf.idx, shape.name)                except AttributeError:                    print(\”{} has no text attribute\”.format(phf.type))                print(\'{} {}\’.format(phf.idx, shape.name))    prs.save(output)

这个函数的基本流程是通过循环并创建每一个包含在源PowerPoint文件中的布局实例。然后在每一页幻灯片上,将填充一个标题(如果有的话)。最后,它会遍历所有包含在模板中的占位符并显示占位符索引以及类型。

如果你想自己试试:

1 python analyze_ppt.py simpletemplate.ppt simpletemplatemarkup.ppt

参考输入和输出文件,看看你得到什么。

创建你自己的幻灯片

对于数据收集和分析,我将从Pandas Pivot Table复制一些通用Excel报告的分析。这篇文章对Pandas数据操作解释得更加细致,所以这将使你在深入代码之前便对它非常了解,这对你肯定非常有用。

让我们从程序的输入和基本命令开始:

123456789101112131415161718 from __future__ import print_functionfrom pptx import Presentationfrom pptx.util import Inchesimport argparseimport pandas as pdimport numpy as npfrom datetime import dateimport matplotlib.pyplot as pltimport seaborn as sns # 函数在这里运行 if __name__ == \”__main__\”:    args = parse_args()    df = pd.read_excel(args.report.name)    report_data = create_pivot(df)    create_chart(df, \”report-image.png\”)    create_ppt(args.infile.name, args.outfile.name, report_data, \”report-image.png\”)

在我们创建命令行参数之后,我们将源Excel文件读入Pandas数据框架,然后,我们使用数据框架作为输入来创建Pivot_table总结:

简介

不管你爱不爱,Powerpoint都被广泛应用于商务场合。文章不会争辩Powerpoint的优点,而是向你展示如何用Python使创建Powerpoint幻灯片自动化,以便去除掉在使用Powerpoint过程中一些单调乏味的工作。

幸运的是,有一个优秀的用于创建和更新PowerPoint文件的Python库:python-pptx。该库的API非常详细,所以很容易使用。唯一棘手的部分是理解PowerPoint文档的结构,包括各种总体布局和元素。一旦你了解了基础知识,自动创建你自己的PowerPoint幻灯片会相对容易很多。本文将通过一个例子研究和分析一些pandas的Excel数据,创建一些可嵌入在PowerPoint文件里的图表。

PowerPoint文件的基础

Python-pptx可以创建空白PowerPoint文件,但大多数人会喜欢在一个根据自己的内容设定好的的模板上工作。Python-pptx的API支持这个预定义的过程并且非常简单,只要你知道关于你的模板的几件事就好了。

在深入一些代码示例之前,你需要了解两个关键部分:幻灯片布局占位符。在下面的图片你可以看到两种不同的布局以及模板占位符的一个例子,你可以把内容填充在其中。

在下面的图片中,你可以看到,我们使用的是布局0,在幻灯片的第一页有一个占位符。

 

这幅图中,我们使用了外观完全不同的布局1。

 

为了让您更轻松地使用自己的模板,我创建了一个简单的独立脚本,这个脚本使用一个模板,并用各种元素来标记这个模板。

我不会一行一行地解释下面的代码,但是你可以自己在github上看analyze_ppt.py,下面是完成主要工作的函数:

123456789101112131415161718192021222324252627 def analyze_ppt(input, output):    \”\”\” 读入文件并分析结构。    输出文件包含标记信息,使生成后面的PowerPoint模板更容易。    \”\”\”    prs = Presentation(input)    # 每个PowerPoint文件有多种布局    # 循环找出不同的元素位置    for index, _ in enumerate(prs.slide_layouts):        slide = prs.slides.add_slide(prs.slide_layouts[index])        # 不是每张幻灯片都有标题        try:            title = slide.shapes.title            title.text = \’Title for Layout {}\’.format(index)        except AttributeError:            print(\”No Title for Layout {}\”.format(index))        # 遍历所有占位符,并通过索引和类型识别它们         for shape in slide.placeholders:            if shape.is_placeholder:                phf = shape.placeholder_format                # 不要覆写仅仅是一个特殊占位符的标题                try:                    if \’Title\’ not in shape.text:                        shape.text = \’Placeholder index:{} type:{}\’.format(phf.idx, shape.name)                except AttributeError:                    print(\”{} has no text attribute\”.format(phf.type))                print(\'{} {}\’.format(phf.idx, shape.name))    prs.save(output)

这个函数的基本流程是通过循环并创建每一个包含在源PowerPoint文件中的布局实例。然后在每一页幻灯片上,将填充一个标题(如果有的话)。最后,它会遍历所有包含在模板中的占位符并显示占位符索引以及类型。

如果你想自己试试:

1 python analyze_ppt.py simpletemplate.ppt simpletemplatemarkup.ppt

参考输入和输出文件,看看你得到什么。

创建你自己的幻灯片

对于数据收集和分析,我将从Pandas Pivot Table复制一些通用Excel报告的分析。这篇文章对Pandas数据操作解释得更加细致,所以这将使你在深入代码之前便对它非常了解,这对你肯定非常有用。

让我们从程序的输入和基本命令开始:

123456789101112131415161718 from __future__ import print_functionfrom pptx import Presentationfrom pptx.util import Inchesimport argparseimport pandas as pdimport numpy as npfrom datetime import dateimport matplotlib.pyplot as pltimport seaborn as sns # 函数在这里运行 if __name__ == \”__main__\”:    args = parse_args()    df = pd.read_excel(args.report.name)    report_data = create_pivot(df)    create_chart(df, \”report-image.png\”)    create_ppt(args.infile.name, args.outfile.name, report_data, \”report-image.png\”)

在我们创建命令行参数之后,我们将源Excel文件读入Pandas数据框架,然后,我们使用数据框架作为输入来创建Pivot_table总结:

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...