Python 自动化办公之 Excel 拆分并自动发邮件
作者 | 周萝卜
来源 | 萝卜大杂烩
今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍!
需求
需要向大约 500 名用户发送带有 Excel 附件的电子邮件,同时必须按用户从主 Excel 文件中拆分数据以创建他们自己的特定文件,然后将该文件通过电子邮件发送给正确的用户。
需求解析
大致的流程就是上图,先拆分 Excel 数据,提取出对应的邮件地址和用户的数据信息,再自动添加到邮件的附件当中。
代码实现
首先我们先来看下我们手中 Excel 的数据形式是怎么样的
import datetime
import os
import shutil
from pathlib import Path
import pandas as pdsrc_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 win32today_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_addressmail.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多层级索引的数据分析
资讯
红帽、Docker、SUSE在俄停服
技术
太强了!Python开发桌面小工具
技术
一行Python代码能干嘛?来看!
分享
点收藏
点点赞
点在看
Python 自动化办公之 Excel 拆分并自动发邮件相关推荐
- Python自动化办公之Excel拆分并自动发邮件
今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要向大约 500 名用户发送带有 E ...
- 【Python】自动化办公之Excel拆分并自动发邮件
文章目录 前言 1.需求 2.需求解析 3.代码实现 总结 前言 今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python ...
- python自动化办公:文件篇(自动整理文件,一键完成)
文件整理不得不先提一下正则表达式 送上链接: python :re模块基本用法 一.列出文件夹下的所有文件 用到的库os Python os.path() 模块 详解 附算例 os.walk()用法 ...
- python自动化办公:excel篇,从此做表不加班。
表格讲解 表格格式 表格分为:工作簿,工作表,单元格 如图:整个文件就是一个工作簿,下面的 zhengjiang_power 和sheet1为工作表. xlrd +xlwt读写表格 因为电脑右键新建的 ...
- Python 自动化办公之 Excel 对比工具
作者 | 周萝卜 来源丨萝卜大杂烩 今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于 ...
- Python自动化办公之Excel对比工具
今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于工作当中经常需要对比前后两个 Exc ...
- Python自动化办公-让 Excel 飞起来
Python 操作 Excel 可能是自动化办公最火热的需求了,看一看公众号文章底部的视频广告就知道了,里面尽是一些 5 分钟搞定 excel,将数据生成漂亮的图表. 5 分钟虽然有些夸张,但是快速操 ...
- Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家
前言 在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错.而Python在自动化办公方面具有极大的优 势,可以解决我们工作中遇到的很多重复性问题,分分钟搞定办公需求.快速下班回 ...
- Python自动化办公之PDF拆分工具
今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要从 PDF 中取出几页并将其保存为新 ...
最新文章
- SAP QM QPV3查看Sample-Drawing Procedure
- CREATE SEQUENCE添加自增序列及NEXT VALUE FOR返回序列号
- python logging
- nginx中的数组结构ngx_array_t
- Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)
- [转载]acm进阶之路
- vue 下拉框筛选列表_vue下拉菜单选择输入框_带有下拉菜单的Vue搜索输入可提供更多过滤条件...
- Taro+react开发(88):taro条件渲染
- docker build Dockfile ---- RUN 中 cd 切换路径失败 的原因、解决
- 吴恩达机器学习作业 6.支持向量机
- c语言依次调用字符串中的元素,C语言经典题目(某校复试真题)
- android 创建线程的三种方式
- word计算机板书,Word板书设计怎么写
- 「2020总结文章」一起回顾 2020,展望 2021(JesksonUI-UniApp)
- 智能电视如何测试软件,智能电视屏幕如何快速识别好坏?教你几招!
- EndNote20 快捷键
- 正反斜杠的区别_正斜杠(/)和反斜杠(\)的区别
- 教你几招如何看透一个人一件事!
- 架构师的必备素质和成长途径
- 临床基因组/外显组数据分析实战技术研讨会(2023.1)