<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
需要向大約 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自動化辦公內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45