<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python自動化辦公之Excel拆分并自動發(fā)郵件

          共 4774字,需瀏覽 10分鐘

           ·

          2022-03-23 10:54

          今天我們來分享一個真實(shí)的自動化辦公案例,希望各位 Python 愛好者能夠從中得到些許啟發(fā),在自己的工作生活中更多的應(yīng)用 Python,使得工作事半功倍!

          需求

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

          需求解析


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

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

          首先我們先來看下我們手中 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 就是那個唯一的用戶 ID,下面我們以該字段來分組,得到如下數(shù)據(jù)


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

          我們再來看下用戶 A1005 所對應(yīng)的數(shù)據(jù)形式


          接下來我們就為每一個用戶創(chuàng)建一個 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 所包含的數(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')]

          最后我們可以通過將 DataFrame 合并在一起來生成帶有電子郵件地址的文件列表

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

          通過上面這個簡單的類,我們可以生成電子郵件并附加 Excel 文件

          同時我們還注意到,這里使用了 win32,關(guān)于這個庫的具體使用,我們在下次的文章中再具體說明吧


          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)

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

          喜歡就在看點(diǎn)贊轉(zhuǎn)發(fā),三連支持一下噻!



          有興趣的同學(xué)可以火速加入我們的星球
          3周零基礎(chǔ)入門提供10節(jié)課程
          全年12節(jié)趣味實(shí)戰(zhàn)項(xiàng)目含源碼,
          每月獎勵優(yōu)秀的Top3同學(xué)送書
          專業(yè)的答疑群,大廠的老師保姆式的教學(xué)

          如果不滿意,三天內(nèi)隨意退款!一年88,現(xiàn)在優(yōu)惠16元



          掃碼加入,3周零基礎(chǔ)入門





          推薦閱讀:

          入門: 最全的零基礎(chǔ)學(xué)Python的問題  | 零基礎(chǔ)學(xué)了8個月的Python  | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


          AI: 會做詩的機(jī)器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水印! | 一鍵把html網(wǎng)頁保存為pdf!|  再見PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r機(jī)票提示器! |60行代碼做了一個語音壁紙切換器天天看小姐姐!


          年度爆款文案

          點(diǎn)閱讀原文,看B站22個原創(chuàng)視頻!

          瀏覽 52
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩和欧美的一区二区 | a片一级富二代表兄妹淫乱新春 | 青娱乐在线视频精品 | 亚洲色无码A片一区二小说 | 国产野外在线播放 |