乐于分享
好东西不私藏

第6课:自动化闭环——把图表一键插入Excel和PPT

第6课:自动化闭环——把图表一键插入Excel和PPT

职场痛点:图画好了,结果还要手动复制 → 粘贴 → 调大小 → 改格式 → 放PPT → 再发邮件……

每周一早上8点,你蹲在工位里像个贴图员,领导还说:“怎么又晚了?”

别贴了!咱们用Python,一键搞定:画图 + 插Excel + 塞PPT + 发邮件。


一、先说清楚:我们这节课到底干啥?

我们来做一个真实场景的自动化闭环

✅ 每周一早上8点✅ 自动生成一张销售趋势图(比如上周销量)✅ 自动插入到Excel表格里(带数据+图表)✅ 自动插入到PPT里(一页幻灯片,有标题、有图、有备注)✅ 自动发邮件给领导,附件带上这个Excel和PPT✅ 你全程不用动手,连电脑都不用开

听起来像魔法?其实就几段Python代码的事。

工具我们还是用 PyCharm,代码跑一次,以后每周自动来。


二、先装几个“干活的小弟”

在PyCharm里打开你的项目,先装这几个库:

pip install openpyxl python-pptx matplotlib schedule smtplib emai

解释一下它们是干啥的:

  • openpyxl:操作Excel,能写数据、插图片
  • python-pptx:操作PPT,能新建幻灯片、加图加字
  • matplotlib:画图用的(之前用过)
  • schedule:定闹钟用的,比如“每周一8点执行”
  • smtplib + email:发邮件用的

三、第一步:把图自动插进Excel

场景:你有个销售数据表,想把趋势图贴在旁边

我们先生成一个Excel,里面:

  • A列是日期,B列是销量

  • D1位置插入一张图

代码来了,直接复制

import openpyxlfrom openpyxl.drawing.image import Imageimport matplotlib.pyplot as pltimport pandas as pdimport os# 1. 先造点假数据data = {'日期': ['周一''周二''周三''周四''周五'],'销量': [120135110150180]}df = pd.DataFrame(data)# 2. 保存成Excelexcel_path = '带图的周报.xlsx'df.to_excel(excel_writer=excel_path, index=False)# 3. 画个图存成图片(解决中文乱码问题)plt.figure(figsize=(106))# 关键修复:设置中文字体plt.rcParams['font.sans-serif'] = ['Microsoft YaHei''SimHei''KaiTi'# 优先使用微软雅黑,其次黑体、楷体plt.rcParams['axes.unicode_minus'] = False# 正常显示负号# 绘制折线图plt.plot(df['日期'], df['销量'], marker='o', linestyle='-', color='blue', linewidth=2, markersize=8)# 设置标题和标签plt.title('销量趋势图', fontsize=14)plt.xlabel('日期', fontsize=12)plt.ylabel('销量', fontsize=12)plt.grid(True, linestyle='--', alpha=0.7)# 保存图片(只保存一次,避免重复警告)plt.tight_layout() # 自动调整布局plt.savefig('销量趋势.png', dpi=300, bbox_inches='tight')# 关闭图形,释放内存plt.close()# 将图片插入Excelif os.path.exists(excel_path) and os.path.exists('销量趋势.png'):    wb = openpyxl.load_workbook(excel_path)    ws = wb.active# 在Excel中插入图片(假设放在B7单元格)    img = Image('销量趋势.png')    img.width = 400    img.height = 300    ws.add_image(img, 'B7')# 保存Excel    wb.save(excel_path)    print(f"成功生成Excel和图片!文件路径:{os.path.abspath(excel_path)}")else:    print("错误:Excel或图片文件未生成,请检查代码执行过程")

👉 效果:打带图的周报.xlsx,你会看到右下脚贴着一张清爽的图。


四、第二步:把图自动塞进PPT

场景:领导要看PPT汇报,你不想一页页贴图

我们用python-pptx自动生成一页PPT:

  • 标题:上周销售情况
  • 内容:插入刚才那张图
  • 备注:写一句“数据来源:销售部,趋势向好”

代码来了:

from pptx import Presentationfrom pptx.util import Inches# 创建PPTppt = Presentation()slide = ppt.slides.add_slide(ppt.slide_layouts[5]) # 空白页# 加标题title = slide.shapes.titletitle.text = "上周销售情况"# 插入图片(位置和大小)left = Inches(1)top = Inches(1.5)height = Inches(5)pic = slide.shapes.add_picture('销量趋势.png', left, top, height=height)# 加备注(演讲者备注)text = "数据来源:销售部\n趋势向好,建议加大推广"slide.notes_slide.notes_text_frame.text = text# 保存ppt.save('周报.pptx')print("✅ 图片已插入PPT!")

👉 效果:打开周报.pptx一页清爽的汇报页就出来了,连备注都有。


五、第三步:把报告自动发邮件

场景:每周一早上8点,自动发给领导

把刚才生成的两个文件当附件发出去。

代码如下(记得改邮箱和密码):

from pptx import Presentationfrom pptx.util import Inches# 创建PPTppt = Presentation()slide = ppt.slides.add_slide(ppt.slide_layouts[5]) # 空白页# 加标题title = slide.shapes.titletitle.text = "上周销售情况"# 插入图片(位置和大小)left = Inches(1)top = Inches(1.5)height = Inches(5)pic = slide.shapes.add_picture('销量趋势.png', left, top, height=height)# 加备注(演讲者备注)text = "数据来源:销售部\n趋势向好,建议加大推广"slide.notes_slide.notes_text_frame.text = text# 保存ppt.save('周报.pptx')print("✅ 图片已插入PPT!")

📌 注意:

  • QQ邮箱要开“SMTP服务”,获取“授权码”(不是密码)
  • 其他邮箱(如163、企业微信)方法类似,搜“邮箱 SMTP 设置”就行

六、终极一步:让这一切每周自动运行!

我们用 schedule 库,让程序每周一早上8点自动跑。

import scheduleimport timefrom datetime import datetimedefjob():    print(f"⏰ 开始执行周报任务:{datetime.now()}")# 这里按顺序执行上面所有步骤# 你可以把前面的代码封装成函数,比如:    generate_excel_with_chart()    generate_ppt()    send_email()    print("✅ 本周周报已全部完成!")# 设定每周一早上8点执行schedule.every().monday.at("08:00").do(job)print("🚀 周报机器人已启动,等待执行...")whileTrue:    schedule.run_pending()    time.sleep(60# 每分钟检查一次

📌 实际使用建议:

  • 把整个流程封装成函数,比如run_weekly_report()
  • 把这个脚本放在一台一直开机的电脑或服务器上(比如你家里的旧电脑)
  • 或者用 Windows任务计划程序 / Mac的launchd 定时启动

七、总结:你学会了什么?

我们这节课干了啥?
  • 用 openpyxl 把图插进Excel
  • 用 python-pptx把图塞进PPT
  • 用 smtplib 自动发邮件带附件
  •  schedule定时每周执行

从画图到发邮件,全程零手动,闭环打通。


八、你可以怎么升级?

  • 加个时间判断:如果不是周一,就只生成不发邮件(测试用)
  • 把图表生成逻辑换成真实数据库查询
  • 加个日志记录:每次执行成功/失败都记下来
  • 用 yagmail 简化发邮件代码(更简单)
  • 接入钉钉/企业微信机器人,发个通知:“周报已发送”

最后一句大实话:

别再当贴图工了。你花2小时写这段代码,未来52周,每周省下30分钟一年就是26小时,够你多放三天假。

自动化不是炫技,是偷懒的高级形式。



如果你觉得这课有用,点赞 + 在看,让我知道你在看。有啥问题,评论区直接问,小居一个个回!