作者 | 周萝卜

来源 | 萝卜大杂烩

今天我们来分享一个真实的自动化办公案例,希望各位 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 拆分并自动发邮件相关推荐

  1. Python自动化办公之Excel拆分并自动发邮件

    今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要向大约 500 名用户发送带有 E ...

  2. 【Python】自动化办公之Excel拆分并自动发邮件

    文章目录 前言 1.需求 2.需求解析 3.代码实现 总结 前言 今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python ...

  3. python自动化办公:文件篇(自动整理文件,一键完成)

    文件整理不得不先提一下正则表达式 送上链接: python :re模块基本用法 一.列出文件夹下的所有文件 用到的库os Python os.path() 模块 详解 附算例 os.walk()用法 ...

  4. python自动化办公:excel篇,从此做表不加班。

    表格讲解 表格格式 表格分为:工作簿,工作表,单元格 如图:整个文件就是一个工作簿,下面的 zhengjiang_power 和sheet1为工作表. xlrd +xlwt读写表格 因为电脑右键新建的 ...

  5. Python 自动化办公之 Excel 对比工具

    作者 | 周萝卜 来源丨萝卜大杂烩 今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于 ...

  6. Python自动化办公之Excel对比工具

    今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 由于工作当中经常需要对比前后两个 Exc ...

  7. Python自动化办公-让 Excel 飞起来

    Python 操作 Excel 可能是自动化办公最火热的需求了,看一看公众号文章底部的视频广告就知道了,里面尽是一些 5 分钟搞定 excel,将数据生成漂亮的图表. 5 分钟虽然有些夸张,但是快速操 ...

  8. Python自动化办公:读取Excel数据并批量生成合同,高效办公,快速回家

    前言 在我们的工作中,面临着大量的重复性工作,通过人工方式处理往往耗时耗力易出错.而Python在自动化办公方面具有极大的优 势,可以解决我们工作中遇到的很多重复性问题,分分钟搞定办公需求.快速下班回 ...

  9. Python自动化办公之PDF拆分工具

    今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要从 PDF 中取出几页并将其保存为新 ...

最新文章

  1. SAP QM QPV3查看Sample-Drawing Procedure
  2. CREATE SEQUENCE添加自增序列及NEXT VALUE FOR返回序列号
  3. python logging
  4. nginx中的数组结构ngx_array_t
  5. Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  6. [转载]acm进阶之路
  7. vue 下拉框筛选列表_vue下拉菜单选择输入框_带有下拉菜单的Vue搜索输入可提供更多过滤条件...
  8. Taro+react开发(88):taro条件渲染
  9. docker build Dockfile ---- RUN 中 cd 切换路径失败 的原因、解决
  10. 吴恩达机器学习作业 6.支持向量机
  11. c语言依次调用字符串中的元素,C语言经典题目(某校复试真题)
  12. android 创建线程的三种方式
  13. word计算机板书,Word板书设计怎么写
  14. 「2020总结文章」一起回顾 2020,展望 2021(JesksonUI-UniApp)
  15. 智能电视如何测试软件,智能电视屏幕如何快速识别好坏?教你几招!
  16. EndNote20 快捷键
  17. 正反斜杠的区别_正斜杠(/)和反斜杠(\)的区别
  18. 教你几招如何看透一个人一件事!
  19. 架构师的必备素质和成长途径
  20. 临床基因组/外显组数据分析实战技术研讨会(2023.1)

热门文章

  1. 启示录:打造用户喜爱的产品【PDF清晰版】,产品经理必看书籍之一
  2. 新技术、新思维开创公共安全管理新模式
  3. 手机安全卫士——软件管理-用户程序和系统程序
  4. Selenium2+python自动化25-js处理日历控件(修改readonly属性)
  5. 新盒模型移动端的排版
  6. Nginx自定义模块编写:根据post参数路由到不同服务器
  7. 自动生成HTML的一段程序
  8. Java面试题大汇总,2021年附答案解析
  9. c语言坐标正反算代码,C语言代码逆向的实战十篇(原创)
  10. 系统动力学_System Dynamics