每周五下午,部门的“噩梦”准时到来——要做周报PPT!
小王需要从一堆Excel表格里找出本周的关键数据,然后手动打开PPT,一页一页地复制图表、更新数字、修改文本框。内容枯燥重复,还容易出错。
这次,小王决定不再忍受这种“手工劳动”,要用Python写一个脚本,让数据每周自己“跑”到PPT里去,而小王只需要优雅地点击一下运行。
任务描述
小王的文件下下Excel工作表中有两张表格,一张记录了本周销售概况。如下图:
另一张则记录了本周销售产品的销售榜单,每次汇报时,只汇报销售榜单的前五即可。如下图:
每月的PPT模板是固定的,总共有3页。第一页展示了当前日期。如下:
第二页展示“本周业绩概览”,如下图:
第三页展示“销售榜单Top5的产品”,如下图:
程序运行后,需要根据Excel表格中的数据,在PPT模板基础上更新销售数据。如下图:
第一页:
第二页:
第三页:
不用每次都填写数据,是不是很方便?下面,我们分析一下小王的具体做法。
思路分析
具体来讲, 这个任务就像是一个“数字积木”游戏。我们分步骤完成即可。
读取数据:用pandas从Excel中读取我们需要的数据。打开模板:用python-pptx打开准备好的PPT模板文件。定位元素:在PPT的特定页面上,找到需要更新的文本框、图表或表格。注意:这一步通常通过遍历页面上的所有形状(Shapes)并判断其是否有文本框或是否是图表/表格来实现。更新内容:将Excel中的数据写入到找到的PPT元素中。保存成果:将更新后的PPT另存为一个新文件。重要步骤使用的源代码
首先需要安装库并导入:
pip install pandas python-pptx
1. 读取Excel数据
由于这个工作簿中有两张我们使用的表格,需要先读取所有Sheet
excel_data = pd.read_excel('./本周数据.xlsx', sheet_name=None)
获取“销售摘要”表
df_summary = excel_data['销售摘要']
获取“Top5产品”表
df_top5 = excel_data['Top5产品']
然后,将摘要数据转换为字典,方便后续使用
summary_dict = dict(zip(df_summary['指标'], df_summary['数值']))
2. 打开PPT模板
prs = Presentation('./周报模板.pptx')
3. 依次获取模板中的每一页内容并更新
获取某一页幻灯片,使用如下代码,n为页面索引,从0开始。
slide_title = prs.slides[n]
注意,模板中要存在相应的页面,否则会报错。
获取到某一个内容后,我们直接使用slide_title.shapes判断查找需要更新的元素内容。PPT中的每一个元素(文本框、表格、图片)都是一个Shape对象实例。
首先判断是否存在该元素,这里以文本框为例:
if shape.has_text_frame:
这里我们用到了几个ppt中常用的元素(该案例中表格根据模板绑定数据会自动更新),如:
文本框:shape.text_frame表格:shape.table然后,逐项修改相应的选项即可,具体实现过程参照源代码。
4.保存新的PPT
定义一个ppt名称
new_ppt_name = f'销售周报_{datetime.now().strftime("%Y%m%d")}.pptx'
保存操作
prs.save(new_ppt_name)
操作完成后,打印结果。
print(f"PPT周报生成成功!文件已保存为:{new_ppt_name}")
源代码如下
知识点总结
python-pptx库:用于创建、读取、更新PPT(.pptx)文件的核心库。
遍历形状(Shapes):PPT中的每一个元素(文本框、表格、图片)都是一个Shape,通过遍历和判断其属性来找到需要操作的目标是关键。
文本替换逻辑:通过检查文本框架(Text Frame)中的内容是否包含特定关键词(如“日期”、“本周销售额”)来定位需要更新的文本框。
表格操作:通过.cell(row, col).text来对表格的特定单元格进行读写操作。
启发及思考
这个案例是 “数据驱动” 和 “模板化” 思想的完美结合。它将最耗时的“设计”和“数据准备”工作分离开:
模板化设计:美工或PPT高手可以一次性设计出精美的模板,定义好所有元素的样式和位置。此后,我们只需要关心数据的注入,保证了输出成果的美观和专业。数据驱动:Python脚本充当了自动化的“双手”,精准地将数据填充到模板的指定位置,实现了报告的批量、快速、零差错生成。可以扩展:此方法不仅适用于周报,任何需要定期生成的、结构固定的报告都可以套用此模式,如月报、项目阶段性报告、客户数据展示等。这将员工从低价值的重复劳动中彻底解放出来,投入到更高价值的分析决策工作中。
python高手养成
专注原创,通过案例,提高python应用技能
3831 篇内容创作

