请听我详细讲解Python自动化办公之Excel拆分与自动发邮件的完整实例教程。
简介
本实例教程旨在通过Python实现Excel拆分与自动发邮件,实现自动化办公的目标。具体来说,我们可以通过Python实现以下功能:
- 从Excel文件中读取数据进行拆分。
- 每个子文件生成后自动以邮件发送给相关人员。
- 函数化该过程,以适应不同场景的需求。
实现步骤
安装依赖库
首先,我们需要在Python中安装pandas
和openpyxl
库,这两个库可以方便地读取Excel文件并进行拆分,命令如下:
!pip install pandas openpyxl
导入所需模块
在开始编写代码之前,我们需要先导入所需模块。下面是导入的代码:
import os
import pandas as pd
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.image import MIMEImage
创建函数
接下来,我们可以定义一个函数来实现Excel拆分的功能。代码如下:
def split_excel(file_path, sheet_name, col_name):
# 读取Excel文件
df = pd.read_excel(file_path, sheet_name=sheet_name)
# 获取拆分列的所有不重复的值
split_vals = df[col_name].unique()
# 遍历每个拆分值,生成新Excel文件
for val in split_vals:
new_df = df[df[col_name] == val]
new_file_name = val + ".xlsx"
new_file_path = os.path.join(os.path.dirname(file_path), new_file_name)
new_df.to_excel(new_file_path, index=False, sheet_name=val)
# 发送邮件
send_email(new_file_path, val)
这个函数有三个参数:
file_path
: Excel文件的路径。sheet_name
: 要拆分的工作表的名称。col_name
: 要拆分的列的名称。
这个函数的基本逻辑是:
- 读取Excel文件,并获取拆分列的所有不重复的值。
- 遍历每个拆分值,生成新Excel文件,并以该拆分值为文件名保存在与原文件相同的路径下。
- 对于每个新的Excel文件,自动发送一封邮件。
创建发送邮件函数
接下来,我们需要创建一个函数来实现发送邮件的功能。代码如下:
def send_email(file_path, subject):
# 设置邮箱服务器地址和端口
smtp_server = "smtp.qq.com"
smtp_port = 465
# 设置发件人和收件人
sender = "你的邮箱地址@qq.com"
receiver = "收件人的邮箱地址"
# 设置邮箱账号和密码
user_name = "你的邮箱地址@qq.com"
password = "邮箱授权码"
# 生成邮件主体,包括文本和附件
msg = MIMEMultipart()
msg["Subject"] = subject
msg["From"] = sender
msg["To"] = receiver
# 添加文本
text = MIMEText("请查收附件")
msg.attach(text)
# 添加附件
with open(file_path, "rb") as f:
attachment = MIMEApplication(f.read(), _subtype="xlsx")
attachment.add_header("Content-Disposition", "attachment", filename=os.path.basename(file_path))
msg.attach(attachment)
# 连接邮箱服务器并发送邮件
try:
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(user_name, password)
server.sendmail(sender, receiver, msg.as_string())
server.quit()
print("邮件发送成功!")
except Exception as e:
print("邮件发送失败,错误信息:", e)
这个函数有两个参数:
file_path
: 要发送的文件的路径。subject
: 邮件的主题。
这个函数的基本逻辑是:
- 设置邮箱服务器地址和端口。
- 设置发件人和收件人。
- 设置邮箱账号和密码。
- 生成邮件主体,包括文本和附件。
- 连接邮箱服务器并发送邮件。
调用函数
最后,我们只需要调用split_excel
函数即可实现Excel拆分和自动发邮件。代码如下:
file_path = "数据.xlsx"
sheet_name = "Sheet1"
col_name = "城市"
split_excel(file_path, sheet_name, col_name)
在这里,我们将拆分列设置为城市
,你可以根据实际情况进行调整。执行完毕后,程序会按照拆分列的值生成多个Excel文件,并将它们自动发送给相关人员。
示例说明
下面是两个示例,展示了如何使用这个函数:
示例一
假设我们有一个包含员工工资信息的Excel文件,每个员工的信息都包括姓名、部门和工资等几个属性,如下所示:
姓名 | 部门 | 城市 | 工资 |
---|---|---|---|
张三 | 技术部 | 北京 | 10000 |
李四 | 财务部 | 上海 | 12000 |
王五 | 行政部 | 北京 | 8000 |
... | ... | ... | ... |
我们想要将这个文件按照城市进行拆分,并将每个城市的信息发送给相关人员。我们只需要调用split_excel
函数,代码如下:
file_path = "员工工资信息.xlsx"
sheet_name = "Sheet1"
col_name = "城市"
split_excel(file_path, sheet_name, col_name)
这个函数执行完毕后,就会按照城市的属性自动将Excel文件拆分成多个文件,并将它们自动发送给相关人员。
示例二
假设我们有一个包含销售订单信息的Excel文件,每个订单的信息都包括订单号、产品名称、销售日期和购买数量等几个属性,如下所示:
订单号 | 产品名称 | 销售日期 | 城市 | 购买数量 |
---|---|---|---|---|
1001 | iPhone XR | 2020-01-01 | 北京 | 10 |
1002 | iPad mini | 2020-01-02 | 上海 | 20 |
1003 | MacBook Air | 2020-01-03 | 广州 | 5 |
... | ... | ... | ... | ... |
我们想要将这个文件按照城市进行拆分,并将每个城市的信息发送给相关人员。我们只需要调用split_excel
函数,代码如下:
file_path = "销售订单信息.xlsx"
sheet_name = "Sheet1"
col_name = "城市"
split_excel(file_path, sheet_name, col_name)
这个函数执行完毕后,就会按照城市的属性自动将Excel文件拆分成多个文件,并将它们自动发送给相关人员。
总结
在本实例教程中,我们利用Python实现了Excel拆分与自动发邮件的功能,并给出了两个具体的示例说明。如果你也需要实现这个功能,只需要修改参数即可使用。我希望这个实例教程能够对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python自动化办公之Excel拆分与自动发邮件 - Python技术站