title: “影刀RPA PPT自动生成:用数据驱动演示文稿”
date: 2026-07-01
author: 林焱
影刀RPA PPT自动生成:用数据驱动演示文稿
每周周报要做PPT,月度总结要做PPT,数据图表要截图贴进PPT……这种重复劳动最适合自动化。影刀配合python-pptx可以自动生成规范的PPT,数据更新了一键刷新。
什么情况用什么
适合自动生成PPT的场景:
周报月报,格式固定,只换数据和图表
销售业绩汇报,从数据库读数据自动生成
多区域数据汇总,结构相同只是数据不同
竞品分析报告,采集完数据自动组装
不适合的场景:
- PPT需要精心设计排版,自动生成的太丑
- 内容完全无规律,每次都不一样
拼多多店群自动化报活动上架!
怎么做
基础方法:从模板克隆生成
做好PPT模板,用python-pptx修改数据,克隆生成多份。
【影刀操作】
添加【Python】指令(安装依赖)
importsubprocess subprocess.run(['pip','install','python-pptx','matplotlib'],capture_output=True)添加【Python】指令(生成PPT)
frompptximportPresentationfrompptx.utilimportInches,Ptfrompptx.dml.colorimportRGBColorimportmatplotlib.pyplotaspltimportio# 读取模板prs=Presentation(r'C:\模板\周报模板.pptx')# 修改第1页标题(幻灯片索引从0开始)slide=prs.slides[0]forshapeinslide.shapes:ifshape.has_text_frame:forparainshape.text_frame.paragraphs:forruninpara.runs:if'{{week}}'inrun.text:run.text=run.text.replace('{{week}}','第27周')if'{{date_range}}'inrun.text:run.text=run.text.replace('{{date_range}}','2024.06.24-2024.06.30')# 在第2页插入图表图片slide2=prs.slides[1]# 先用matplotlib生成图表,保存为图片fig,ax=plt.subplots(figsize=(8,4))weeks=['第23周','第24周','第25周','第26周','第27周']sales=[120,135,128,142,158]ax.bar(weeks,sales,color='#2196F3')ax.set_title('周销售额趋势(万元)')ax.set_ylabel('销售额(万元)')# 保存图表到内存buf=io.BytesIO()plt.savefig(buf,format='png',dpi=150,bbox_inches='tight')buf.seek(0)plt.close()# 插入图片到PPTleft=Inches(1)top=Inches(1.5)width=Inches(8)slide2.shapes.add_picture(buf,left,top,width=width)# 保存prs.save(r'C:\输出\2024第27周周报.pptx')print('PPT生成成功')
进阶方法:批量生成多个区域的PPT
从Excel读取各区域数据,批量生成报告。
【影刀操作】
- 添加【读取Excel】指令读取数据
- 按区域分组
- 添加【循环】指令,每个区域生成一个PPT
- 在循环内添加【Python】指令
frompptximportPresentationfrompptx.utilimportInches,Ptimportcopy region=current_region_data['region']prs=Presentation(r'C:\模板\区域报告模板.pptx')# 遍历所有幻灯片,替换所有占位符forslideinprs.slides:forshapeinslide.shapes:ifnotshape.has_text_frame:continueforparainshape.text_frame.paragraphs:forruninpara.runs:run.text=run.text.replace('{{region}}',region)run.text=run.text.replace('{{total_sales}}',str(current_region_data['total_sales']))run.text=run.text.replace('{{growth_rate}}',f"{current_region_data['growth_rate']:.1%}")output_path=f"C:\\区域报告\\{region}_2024Q2报告.pptx"prs.save(output_path)print(f'已生成:{output_path}')
实用技巧:添加数据表格到PPT
【影刀操作】
frompptximportPresentationfrompptx.utilimportInches prs=Presentation()slide=prs.slides.add_slide(prs.slide_layouts[5])# 空白布局# 添加表格rows,cols=5,3table=slide.shapes.add_table(rows,cols,Inches(1),Inches(1.5),Inches(8),Inches(3)).table# 设置表头headers=['产品','销量','增长率']fori,headerinenumerate(headers):table.cell(0,i).text=header# 填入数据data=[('产品A','1,200','+15%'),('产品B','980','+8%'),('产品C','760','-3%'),('产品D','1,450','+22%'),]forrow_idx,row_datainenumerate(data,1):forcol_idx,valueinenumerate(row_data):table.cell(row_idx,col_idx).text=value prs.save(r'C:\输出\含表格的PPT.pptx')有什么坑
坑1:模板样式没有继承
用python-pptx新建幻灯片时,字体、颜色都是默认的,和模板不一样。
解决方法:不要新建幻灯片,在现有模板幻灯片上修改内容,只替换文本和图片,不改结构。
坑2:图片插入位置偏差
TEMU店群矩阵自动化运营核价报活动
不同PPT模板的尺寸不同(宽屏16:9 vs 标准4:3),图片位置计算出来位置不对。
解决方法:先读取prs.slide_width和prs.slide_height,基于实际尺寸计算位置。
坑3:中文字体显示异常
matplotlib生成的图表中文显示为方块。
解决方法:
importmatplotlib matplotlib.rcParams['font.sans-serif']=['SimHei','Microsoft YaHei']matplotlib.rcParams['axes.unicode_minus']=False坑4:PPT文件被占用
影刀第二次运行时,上次生成的PPT还开着,保存时报文件被占用的错误。
解决方法:生成时用时间戳命名文件,或者先检查文件是否被打开:
importpsutildefis_file_open(filepath):forprocinpsutil.process_iter(['open_files']):try:forfinproc.open_files():iff.path==filepath:returnTrueexcept:passreturnFalse总结
PPT自动生成的关键在模板设计:把固定样式做好,用占位符标记变量位置,影刀负责替换数据和插入图表。一套周报模板做好后,以后每周5分钟自动生成,再也不用手工复制数据了。