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

在这里插入图片描述
今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍!

需求

需要向大约 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,一个月挣了我一学期的生活费

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种功能强大的编程语言,可以被用于办公自动化,其中包括Excel表格的自动化处理。下面我们将详细介绍如何使用Python实现Excel表格的自动化处理。 Python的第三方库openpyxl可以用于处理Excel文件。首先,我们需要安装openpyxl库,可以通过pip命令进行安装。安装完成后,我们可以使用openpyxl库中的函数和方法进行Excel表格的读取、写入和修改。 读取Excel文件非常简单,我们可以使用openpyxl库的load_workbook函数,指定要读取的文件路径,然后使用get_sheet_by_name函数选择要操作的工作表。这样,我们就可以使用cell函数来获取特定单元格的值。 写入和修改Excel文件也很容易。我们可以使用openpyxl库的Workbook函数创建一个新的Excel文件,然后使用create_sheet函数添加工作表。对于已经存在的Excel文件,我们可以使用Workbook的load_workbook函数打开文件,然后可以对工作表进行操作,例如使用cell函数来写入数据或修改单元格的值。 除了基本的读取、写入和修改操作,Python还可以进行更复杂的Excel表格自动化处理。我们可以根据条件筛选数据、合并或拆分单元格、插入和删除行列、设置单元格的格式等。 在实际的办公自动化应用中,Python的openpyxl库配合其他功能强大的库如pandas、numpy等,可以实现更多高级操作。同时,我们还可以使用Python库比如xlwings从Excel中调用Python代码,进一步提高Excel表格的自动化处理能力。 总而言之,Python可以通过openpyxl库实现Excel表格的自动化处理。通过读取、写入和修改单元格,我们可以实现数据的快速处理和分析。此外,Python还能进行更复杂的Excel操作,为办公自动化带来更多便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值