下面我来详细讲解一下“Python生成每日报表数据(Excel)并邮件发送的实例”的完整实例教程。
简介
在日常工作中,我们经常需要将某些数据生成 Excel 报表并通过邮件发送给领导或者同事,这个过程手动完成比较繁琐,所以使用 Python 自动化这个过程非常的有用。
本文将演示如何使用 Python 生成每日报表数据(Excel)并自动发送邮件的完整教程。
步骤
准备工作
- 安装必要的依赖库:
openpyxl
和smtplib
,可以使用 pip 安装:
pip install openpyxl smtplib
- 编写邮件正文模板,可以使用 HTML 语言,此处以一个简单的表格为例:
“`html
每日报告
编号 | 名称 | 数量 |
---|
“`
这里的 %s
将在后面的 Python 代码中被替换为数据表格。
编写 Python 代码
- 导入必要的库:
python
import openpyxl
import smtplib
import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
- 定义报表数据:
python
data = [
("001", "物品1", 10),
("002", "物品2", 20),
("003", "物品3", 5),
("004", "物品4", 12)
]
- 生成 Excel 报表:
python
# 使用 openpyxl 库创建 Excel 工作簿
wb = openpyxl.Workbook()
# 获取当前活动的工作表
ws = wb.active
# 设置标题行
ws.append(["编号", "名称", "数量"])
# 设置数据行
for row in data:
ws.append(row)
# 保存 Excel 文件
today = datetime.datetime.today().strftime('%Y%m%d')
filename = 'data/report_%s.xlsx' % today
wb.save(filename)
运行这段代码将在 data/ 目录下生成一个以当天日期命名的 Excel 文件(例如:report_20220722.xlsx),其中包含了上述定义的data
中的数据。
- 构造邮件正文:
“`python
# 读取 HTML 模板
with open(“email_template.html”) as f:
email_template = f.read()
# 将数据转换为 HTML 表格
data_table = “”
for row in data:
data_table += “
” % row
# 填充 HTML 模板
email_body = email_template % data_table
“`
- 构造邮件附件:
python
attachment = open(filename, 'rb').read()
part = MIMEApplication(attachment)
part.add_header('Content-Disposition', 'attachment', filename=filename)
- 构造完整邮件:
“`python
# 构造邮件
msg = MIMEMultipart()
# 添加邮件正文
body = MIMEText(email_body, ‘html’, ‘utf-8’)
msg.attach(body)
# 添加邮件附件
msg.attach(part)
# 设置邮件信息
msg[‘Subject’] = ‘每日报告’
msg[‘From’] = ‘from@example.com’
msg[‘To’] = ‘to@example.com’
# 邮件发送设置
username = ‘username’
password = ‘password’
smtp_server = ‘smtp.example.com’
smtp_port = 25
# 发送邮件
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(username, password)
server.sendmail(msg[‘From’], msg[‘To’], msg.as_string())
server.quit()
“`
在执行以上代码时,需要将邮件发送者、收件人,SMTP 服务器等信息进行替换。
- 运行 Python 程序
最后,在命令行中执行 Python 程序即可生成 Excel 报表,并将邮件发送给收件人。
$ python report.py
至此,整个过程就完成了。
示例说明
示例1:改变报表样式
如果我们想要改变报表的样式,可以在 ws
上设置相关属性,例如:
# 定义样式
bold_14 = openpyxl.styles.Font(size=14, bold=True)
center_alignment = openpyxl.styles.Alignment(horizontal='center')
# 将样式设置到指定单元格
ws['A1'].font = bold_14
ws['A1'].alignment = center_alignment
示例2:发送多份邮件
如果我们想要将报表发送给多个收件人,只需要对邮件的 To
字段进行修改,例如:
# 收件人列表
to_list = ['user1@example.com', 'user2@example.com', 'user3@example.com']
# 邮件地址列表转字符串
to_str = ','.join(to_list)
# 设置邮件 To 字段
msg['To'] = to_str
# 发送邮件
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(username, password)
server.sendmail(msg['From'], to_list, msg.as_string())
server.quit()
至此,我详细讲解完毕。希望对你有所帮助。