python生成每日报表数据(Excel)并邮件发送的实例

  • Post category:Python

下面我来详细讲解一下“Python生成每日报表数据(Excel)并邮件发送的实例”的完整实例教程。

简介

在日常工作中,我们经常需要将某些数据生成 Excel 报表并通过邮件发送给领导或者同事,这个过程手动完成比较繁琐,所以使用 Python 自动化这个过程非常的有用。

本文将演示如何使用 Python 生成每日报表数据(Excel)并自动发送邮件的完整教程。

步骤

准备工作

  1. 安装必要的依赖库:openpyxlsmtplib,可以使用 pip 安装:

pip install openpyxl smtplib

  1. 编写邮件正文模板,可以使用 HTML 语言,此处以一个简单的表格为例:

“`html

每日报告

%s

编号 名称 数量

“`

这里的 %s 将在后面的 Python 代码中被替换为数据表格。

编写 Python 代码

  1. 导入必要的库:

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

  1. 定义报表数据:

python
data = [
("001", "物品1", 10),
("002", "物品2", 20),
("003", "物品3", 5),
("004", "物品4", 12)
]

  1. 生成 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中的数据。

  1. 构造邮件正文:

“`python
# 读取 HTML 模板
with open(“email_template.html”) as f:
email_template = f.read()

# 将数据转换为 HTML 表格
data_table = “”
for row in data:
data_table += “

%s %s %d

” % row

# 填充 HTML 模板
email_body = email_template % data_table
“`

  1. 构造邮件附件:

python
attachment = open(filename, 'rb').read()
part = MIMEApplication(attachment)
part.add_header('Content-Disposition', 'attachment', filename=filename)

  1. 构造完整邮件:

“`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 服务器等信息进行替换。

  1. 运行 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()

至此,我详细讲解完毕。希望对你有所帮助。