Python自动化办公之Excel拆分与自动发邮件
目录
需求需求解析代码实现需求
需要向大约 500 名用户发送带有 Excel 附件的电子邮件,同时必须按用户从主 Excel 文件中拆分数据以创建他们自己的特定文件,然后将该文件通过电子邮件发送给正确的用户
需求解析
大致的流程就是上图,先拆分 Excel 数据,提取出对应的邮件地址和用户的数据信息,再自动添加到邮件的附件当中
代码实现
首先我们先来看下我们手中 Excel 的数据形式是怎么样的
import datetime import os import shutil from pathlib import Path import pandas as pd src_file = Path.cwd() / "data" / "Example4.xlsx" df = pd.read_excel(src_file) df.head()
可以看出,CUSTOMER_ID 就是那个唯一的用户 ID,下面我们以该字段来分组,得到如下数据
customer_group = df.groupby("CUSTOMER_ID") for ID, group_df in customer_group: print(ID) >>>Output>>> A1000 A1001 A1002 A1005 ...
我们再来看下用户 A1005 所对应的数据形式
接下来我们就为每一个用户创建一个 Excel,后面就可以作为附件使用
attachment_path = Path.cwd() / "data" / "attachments" today_string = datetime.datetime.today().strftime("%m%d%Y_%I%p") attachments = [] for ID, group_df in customer_group: attachment = attachment_path / f"{ID}_{today_string}.xlsx" group_df.to_excel(attachment, index=False) attachments.append((ID, str(attachment)))
我们来看下变量 attachments 所包含的数据吧
[("A1000", "c:\\Users\\luobo\\notebooks\\2020-10\\data\\attachments\\A1000_01162021_12PM.xlsx"), ("A1001", "c:\\Users\\luobo\\notebooks\\2020-10\\data\\attachments\\A1001_01162021_12PM.xlsx"), ("A1002", "c:\\Users\\luobo\\notebooks\\2020-10\\data\\attachments\\A1002_01162021_12PM.xlsx"), ("A1005", "c:\\Users\\luobo\\notebooks\\2020-10\\data\\attachments\\A1005_01162021_12PM.xlsx")]
最后我们可以通过将 DataFrame 合并在一起来生成带有电子邮件地址的文件列表
email_merge = pd.merge(df, df2, how="left") combined = email_merge[["CUSTOMER_ID", "EMAIL", "FILE"]].drop_duplicates()
得到的 DataFrame 如下
我们已经收集了客户名单、他们的电子邮件和附件,现在我们就可以用 Outlook 发送一封电子邮件了
import win32com.client as win32 today_string2 = datetime.datetime.today().strftime("%b %d, %Y") class EmailsSender: def __init__(self): self.outlook = win32.Dispatch("outlook.application") def send_email(self, to_email_address, attachment_path): mail = self.outlook.CreateItem(0) mail.To = to_email_address mail.Subject = today_string2 + " Report" mail.Body = """Please find today"s report attached.""" mail.Attachments.Add(Source=attachment_path) # Use this to show the email #mail.Display(True) # Uncomment to send #mail.Send()
通过上面这个简单的类,我们可以生成电子邮件并附加 Excel 文件
同时我们还注意到,这里使用了 win32,关于这个库的具体使用,我们在下次的文章中再具体说明吧
email_sender = EmailsSender() for index, row in combined.iterrows(): email_sender.send_email(row["EMAIL"], row["FILE"])
最后,我们再把所有生成的 Excel 存档,以备后面审查、比对等
archive_dir = Path.cwd() / "archive" for f in attachments: shutil.move(f[1], archive_dir)
至此,我们的编码结束,整体来看还是比较简单的
到此这篇关于Python自动化办公之Excel拆分与自动发邮件的文章就介绍到这了,更多相关Python自动化办公内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?