Python自動(dòng)化辦公之Excel拆分與自動(dòng)發(fā)郵件
需求
需要向大約 500 名用戶發(fā)送帶有 Excel 附件的電子郵件,同時(shí)必須按用戶從主 Excel 文件中拆分?jǐn)?shù)據(jù)以創(chuàng)建他們自己的特定文件,然后將該文件通過(guò)電子郵件發(fā)送給正確的用戶
需求解析
大致的流程就是上圖,先拆分 Excel 數(shù)據(jù),提取出對(duì)應(yīng)的郵件地址和用戶的數(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è)唯一的用戶 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)看下用戶 A1005 所對(duì)應(yīng)的數(shù)據(jù)形式
接下來(lái)我們就為每一個(gè)用戶創(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)收集了客戶名單、他們的電子郵件和附件,現(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)單的
到此這篇關(guān)于Python自動(dòng)化辦公之Excel拆分與自動(dòng)發(fā)郵件的文章就介紹到這了,更多相關(guān)Python自動(dòng)化辦公內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼
這篇文章主要介紹了Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04Python 之pandas庫(kù)的安裝及庫(kù)安裝方法小結(jié)
Pandas 是一種開(kāi)源的、易于使用的數(shù)據(jù)結(jié)構(gòu)和Python編程語(yǔ)言的數(shù)據(jù)分析工具,它與 Scikit-learn 兩個(gè)模塊幾乎提供了數(shù)據(jù)科學(xué)家所需的全部工具,今天通過(guò)本文給大家介紹Python 之pandas庫(kù)的安裝及庫(kù)安裝方法小結(jié),感興趣的朋友跟隨小編一起看看吧2022-11-11python 如何將office文件轉(zhuǎn)換為PDF
這篇文章主要介紹了python 如何將office文件轉(zhuǎn)換為PDF,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-09-09