每天手动跑报表太浪费时间?定时自动执行+生成Excel+发邮件,完全解放双手。
场景:每天固定时间自动生成报表并邮件发送。核心:APScheduler 定时、pandas 报表、smtplib 邮件、附件发送。
① 生成测试数据
import pandas as pdimport numpy as npdf = pd.DataFrame({ "date": pd.date_range("2025-04-01", periods=7), "sales": np.random.randint(1000, 5000, 7)})df.to_excel("daily_report.xlsx", index=False)print(" daily_report.xlsx 已生成")
② 核心代码(定时+发邮件)
import pandas as pdimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encodersfrom email.header import Headerdef send_report(): # 1. 读取并处理数据 df = pd.read_excel("daily_report.xlsx") df.to_excel("自动报表.xlsx", index=False) # 2. 配置邮箱信息 (请务必填入你的授权码) sender = '发送方' password = '你的QQ邮箱授权码' # 注意:不是登录密码,是SMTP授权码 receiver = '收件方' # 3. 构建复合邮件容器 (关键修复点) msg = MIMEMultipart() # 必须使用 MIMEMultipart 才能支持附件 # 3.1 添加邮件正文 text_body = MIMEText("今日销售数据报表请查收。", 'plain', 'utf-8') msg.attach(text_body) # 3.2 添加附件 filename = "自动报表.xlsx" try: with open(filename, "rb") as f: # 正确读取文件 part = MIMEBase('application', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet') part.set_payload(f.read()) # 编码附件 encoders.encode_base64(part) # 设置附件头 part.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', 'report.xlsx')) msg.attach(part) # 将附件加入邮件容器 print(f"成功读取并加载附件: {filename}") except FileNotFoundError: print(f"错误:未找到文件 {filename},请检查文件路径。") return # 4. 设置邮件头信息 msg['From'] = sender msg['To'] = receiver msg['Subject'] = Header("每日销售自动报表", 'utf-8') # 5. 发送邮件 try: smtp_server = smtplib.SMTP('smtp.qq.com', 587) smtp_server.starttls() smtp_server.login(sender, password) smtp_server.sendmail(sender, receiver, msg.as_string()) smtp_server.quit() print("报表生成并邮件发送成功") except Exception as e: print(f"邮件发送失败: {e}")# 调用函数send_report()
结果展示
自动生成 Excel 报表并模拟邮件发送,可配合 APScheduler 实现每日定时执行。
总结
全流程自动化大幅提升效率,是职场数据分析必备效率神器,可无限扩展。