Python日报自动化:MES数据一键生成Excel报告(附完整源码)
Python日报自动化:MES数据一键生成Excel报告(附完整源码)
1. 我的血泪史:每天2小时的日报工作
2018年,我在FAB做整合工程师的时候,每天早上第一件事不是分析数据,而是做日报。从MES系统导出Excel、复制粘贴数据、调整格式、画图表、排版、发送到邮箱——每天早上9点到11点,整整2个小时就耗在这上面了。
而且这不是我一个人的问题。整个整合部门8个工程师,每个人每天早上都要花2小时做日报。部门每天花16个小时在重复性的日报工作上,每个月就是480个小时。
我试过用Excel的VBA来自动化,但VBA的语法太老了,写出来的代码自己都看不懂。后来学了Python,第一个项目就是做日报自动化。花了1周写脚本,现在每天早上7点50脚本自动运行,8点整邮件就发到邮箱了。
这就是我写这篇文章的原因:日报自动化是FAB工程师学Python最有价值的第一个项目。投入1周,回报是每天2小时,终身受益。
2. 整体架构:5个模块
模块1:MES数据采集。用Python requests库自动登录MES系统,带Token认证、分页拉取。关键是处理Token过期的情况——大多数MES的Token有效期只有2-4小时,需要实现自动刷新机制。
模块2:数据处理和统计。用Pandas做数据清洗、空值处理、格式统一、分组统计。核心是定义好日报的计算逻辑:批次总数、良率均值、设备稼动率、异常批次列表。
模块3:Excel报告生成。用openpyxl库生成格式化的Excel文件,支持多Sheet、合并单元格、单元格颜色、字体大小。关键是写一个样式模板函数,给每个Sheet套用统一的格式。
模块4:邮件自动发送。用Python smtplib库连接公司邮件服务器(SMTP协议),自动添加附件(Excel报告)、HTML格式正文、多个收件人。这个功能让我彻底从「手动发邮件」中解放出来。
模块5:定时调度。用Python Schedule库(或Windows任务计划程序)设置每天定时运行。整个流程:早上7:50自动触发 → 8:00报告发送到邮箱 → 8:05到公司直接看结论。这就是我说的「早上到公司,报告已经生成好了」的体验。
3. 核心代码:MES采集和Excel生成(约80行)
MES采集代码(约40行):先从环境变量读取账号密码(不要硬编码在代码里),然后用requests.get()带Token请求MES API。分页处理:每次请求500条数据,循环直到所有数据拉完。响应数据是JSON格式,直接用pd.DataFrame()转成DataFrame。关键是做好异常处理——MES接口不稳定,网络超时、接口报错都需要处理。
Excel生成代码(约40行):用openpyxl.Workbook()创建工作簿,add_worksheet()添加Sheet。表头行用蓝色背景(fill=solid)、白色粗体字。每列数据按类型格式化:数值型保留2位小数、百分比显示为百分比格式、日期显示为yyyy-mm-dd格式。生成完成后用save()方法保存。
邮件发送代码(约15行):smtplib.SMTP()连接邮件服务器(通常是公司邮箱的SMTP地址),login()登录,sendmail()发送。最重要的是设置好邮件格式——用email.mime.multipart.MIMEMultipart()支持HTML正文和附件。
定时调度代码(约5行):用schedule.every().day.at("07:50").do(main_function)设置每天7:50运行,然后用while True: schedule.run_pending(); time.sleep(60)保持脚本持续运行。这个脚本部署在服务器上,24小时不间断运行。
4. 报告应该包含哪些内容
日报第一部分:生产汇总。今日批次总数、加工晶圆数、平均良率、设备稼动率。这部分用1-2张表格+1张柱状图呈现,数据一目了然。领导看这部分,30秒就能了解今日生产概况。
日报第二部分:异常批次清单。所有良率低于阈值的批次,按严重程度排序。标注:批次号、产品类型、良率数值、偏离均值多少σ、超标原因(如果已知)、负责人。异常批次是日报的核心,是领导最关注的部分。
日报第三部分:设备状态摘要。所有设备的稼动率和良率排名,标注稼动率低于90%的设备(需要关注)和良率排名最低的Top3设备(需要PM)。这部分可以避免设备问题演变成良率问题。

日报第四部分:SPC报警汇总。今日所有SPC报警记录,按设备分组。标注:报警类型(Rule1/Rule2等)、发生时间、当前状态(已关闭/处理中)。SPC报警是FAB质量的早期预警信号,需要持续关注。
周报和月报的扩展:周报在此基础上增加趋势图(本周vs上周vs上月)、Top问题清单(本周处理了哪些问题)、改善计划。月报增加统计分析(良率的均值/标准差/Cpk)、设备故障汇总。
5. 邮件发送的细节配置
收件人设置:日报发到整合部全员+生产主管+设备主管+质量主管。抄送:厂长。这个配置确保所有相关人员都能看到日报,但不会收到大量回复邮件(回复只发回发送者和整合部门)。
邮件标题格式:「FAB日报 | 2026-06-29 | 良率97.3% | 异常批次2」。这种格式让领导在邮箱列表里一眼就能看到关键信息,不需要打开邮件。
附件命名格式:「FAB日报_20260629_v1.xlsx」。日期在文件名里,方便归档检索。v1表示当日第一个版本,如果有修正版本用v2、v3标注。
发送失败处理:脚本要处理SMTP发送失败的情况(比如邮件服务器维护)。发送失败时自动重试3次,每次间隔5分钟。重试3次仍失败时,发送微信/短信通知到管理员手机。
6. 效果对比和ROI计算
手动做日报:每天2小时,每月20个工作日 = 40小时/月 = 480小时/年。按工程师月薪1万元算,每年的价值约2.5万元的人力成本浪费在重复性日报工作上。
Python自动化:首次开发1周(约40小时),后续维护每月2小时 = 全年约64小时。按同样的薪资标准,每年成本约3200元。ROI = 节省416小时,节省成本约2.2万元/年。
更重要的是:Python日报的数据准确性比人工高很多。人工做日报,复制粘贴的时候容易出错,尤其是数字多了之后。Python脚本每次运行结果一致,不存在人为失误。
还有:日报的时效性大大提升。人工日报9点才能发(要等MES系统开放数据),Python脚本7:50自动运行,8:00就能发出去。提前1小时看到数据,意味着可以提前1小时采取行动。
7. 避坑经验
坑1:MES接口不稳定,脚本运行失败。解决:加入重试机制(最多重试3次),每次请求间隔2秒。同时写日志文件,脚本运行失败的时候方便排查原因。日志是运维的基础,没有日志的脚本是不可维护的。
坑2:数据量大了之后脚本运行很慢(超过10分钟)。解决:用批量查询代替逐条查询(每次查500条而不是50条),用NumPy向量化计算代替Pandas循环,用to_csv()而不是Excel格式存储中间结果。
坑3:Excel格式在手机上看不清楚。解决:在Excel里设置「打印区域」和「页面布局」,确保打印出来的报告宽度合适。在邮件正文里同时附上HTML格式的摘要(文字+数字,不需要打开Excel)。
坑4:日报发出后发现数据有误。解决:在脚本里加入数据校验步骤(良率范围检查、设备编号格式检查),发现异常数据时自动报警,不发送错误的日报。同时在日报里标注「数据更新时间」,让读者知道数据的时效性。
---
📝 觉得有帮助的话,点个收藏不迷路!
💬 评论区聊一聊:你们FAB的良率分析目前用什么工具?Excel还是Python?遇到过什么坑?
👉 关注后私信"VIP工具",获取配套Python源码+数据文件!




