Python自动化办公之Excel拆分与自动发邮件

 更新时间:2022年03月18日 09:17:14   作者:萝卜大杂烩  
这篇文章主要何大家分享一个真实的自动化办公案例,即向用户发送带有Excel附件的电子邮件,同时必须按用户从主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自动化办公内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python字符串逆序输出的实例讲解

    Python字符串逆序输出的实例讲解

    今天小编就为大家分享一篇关于Python字符串逆序输出的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python OpenCV中常用图片处理函数小结

    Python OpenCV中常用图片处理函数小结

    在计算机视觉和图像处理领域,OpenCV(Open Source Computer Vision Library)是一个非常强大和流行的开源库,本文将介绍一些常用的OpenCV函数,希望对大家有所帮助
    2024-03-03
  • python plt如何保存为emf图像

    python plt如何保存为emf图像

    这篇文章主要介绍了python plt如何保存为emf图像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 关于Python中Flask全局异常处理流程详解

    关于Python中Flask全局异常处理流程详解

    Flask是一个基于Python的Web框架,它提供了全局异常处理的机制来捕获和处理应用程序中的异常,本文将详细介绍Flask的全局异常处理,并提供相应的代码示例,需要的朋友可以参考下
    2023-06-06
  • 浅谈pyqt5在QMainWindow中布局的问题

    浅谈pyqt5在QMainWindow中布局的问题

    今天小编就为大家分享一篇浅谈pyqt5在QMainWindow中布局的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python中使用Boolean操作符做真值测试实例

    Python中使用Boolean操作符做真值测试实例

    这篇文章主要介绍了Python中使用Boolean操作符做真值测试实例,在Python中,任何类型的对象都可以做真值测试,并且保证返回True或者False,需要的朋友可以参考下
    2015-01-01
  • Python入门(六)Python数据类型

    Python入门(六)Python数据类型

    这篇文章主要介绍了Python入门(六)Python数据类型,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • Django2.2配置xadmin的实现

    Django2.2配置xadmin的实现

    这篇文章主要介绍了Django2.2配置xadmin的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • python进阶教程之循环相关函数range、enumerate、zip

    python进阶教程之循环相关函数range、enumerate、zip

    这篇文章主要介绍了python进阶教程之循环相关函数range、enumerate、zip,在使用循环程序经常要配合这些函数来完成循环,需要的朋友可以参考下
    2014-08-08
  • python redis 批量设置过期key过程解析

    python redis 批量设置过期key过程解析

    这篇文章主要介绍了python redis 批量设置过期key过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论