日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Python自動(dòng)化辦公之Excel拆分并自動(dòng)發(fā)郵件

需求

需要向大約 500 名用戶(hù)發(fā)送帶有 Excel 附件的電子郵件,同時(shí)必須按用戶(hù)從主 Excel 文件中拆分?jǐn)?shù)據(jù)以創(chuàng)建他們自己的特定文件,然后將該文件通過(guò)電子郵件發(fā)送給正確的用戶(hù)

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到文安網(wǎng)站設(shè)計(jì)與文安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋文安地區(qū)。

需求解析

大致的流程就是上圖,先拆分 Excel 數(shù)據(jù),提取出對(duì)應(yīng)的郵件地址和用戶(hù)的數(shù)據(jù)信息,再自動(dòng)添加到郵件的附件當(dāng)中

代碼實(shí)現(xiàn)

首先我們先來(lái)看下我們手中 Excel 的數(shù)據(jù)形式是怎么樣的。

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 就是那個(gè)唯一的用戶(hù) ID,下面我們以該字段來(lái)分組,得到如下數(shù)據(jù)。

customer_group = df.groupby('CUSTOMER_ID')
for ID, group_df in customer_group:
print(ID)
>>>Output>>>
A1000
A1001
A1002
A1005
...

我們?cè)賮?lái)看下用戶(hù) A1005 所對(duì)應(yīng)的數(shù)據(jù)形式。

接下來(lái)我們就為每一個(gè)用戶(hù)創(chuàng)建一個(gè) 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)))

我們來(lái)看下變量 attachments 所包含的數(shù)據(jù)吧。

[('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')]

最后我們可以通過(guò)將 DataFrame 合并在一起來(lái)生成帶有電子郵件地址的文件列表。

email_merge = pd.merge(df, df2, how='left')
combined = email_merge[['CUSTOMER_ID', 'EMAIL', 'FILE']].drop_duplicates()

得到的 DataFrame 如下:

我們已經(jīng)收集了客戶(hù)名單、他們的電子郵件和附件,現(xiàn)在我們就可以用 Outlook 發(fā)送一封電子郵件了。

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()

通過(guò)上面這個(gè)簡(jiǎn)單的類(lèi),我們可以生成電子郵件并附加 Excel 文件。

同時(shí)我們還注意到,這里使用了 win32,關(guān)于這個(gè)庫(kù)的具體使用,我們?cè)谙麓蔚奈恼轮性倬唧w說(shuō)明吧。

email_sender = EmailsSender()
for index, row in combined.iterrows():
email_sender.send_email(row['EMAIL'], row['FILE'])

最后,我們?cè)侔阉猩傻?Excel 存檔,以備后面審查、比對(duì)等。

archive_dir = Path.cwd() / 'archive'
for f in attachments:
shutil.move(f[1], archive_dir)

至此,我們的編碼結(jié)束,整體來(lái)看還是比較簡(jiǎn)單的。


當(dāng)前文章:Python自動(dòng)化辦公之Excel拆分并自動(dòng)發(fā)郵件
本文路徑:http://www.dlmjj.cn/article/cddgeee.html