日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/9/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python自动化办公之Excel拆分并自动发邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天我們來分享一個真實的自動化辦公案例,希望各位 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)

至此,我們的編碼結束,整體來看還是比較簡單的

喜歡就在看點贊轉發,三連支持一下噻!

END

各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)

推薦閱讀

牛逼!Python常用數據類型的基本操作(長文系列第①篇)

牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)

牛逼!Python函數和文件操作(長文系列第③篇)

牛逼!Python錯誤、異常和模塊(長文系列第④篇)

總結

以上是生活随笔為你收集整理的Python自动化办公之Excel拆分并自动发邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。