我幫公司財務寫了個“群發工資條”的Python指令碼!
1.本文介紹
這是一個很好的Python自動化的案例。對於小公司,採用手動方式一個個傳送郵件還是可以的。如果一個上百號,上千號,或者更大規模的公司,我們再一個個傳送工資條郵件,就太浪費時間了。鑑於此,我寫了一個這樣的程式,實現Python自動化群發工資條的功能。
很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!
QQ群:101677771
原始資料來源如下:
最終效果如下:
看到這裡,你肯定也覺得很好玩兒吧?那麼這樣一個自動化程式,應該怎麼做呢?接著往下看。
2.流程分析
其實這樣一個程式碼,總結下來,就只有如下5步:
① 匯入相關模組;
② 讀取Excel表格;
③ 登入郵箱;
④ 準備要傳送的郵件正文;
⑤ 傳送郵件;
1)匯入相關模組
fromopenpyxlimportload_workbook#用於操作Excel的模組
importyagmail#用於儲存郵箱地址和密碼的模組
importkeyring#用於記錄你郵箱地址和密碼的模組
fromdatetimeimport*#用於獲取當前系統時間的模組
2)讀取Excel表格
#載入Excel檔案 wb=load_workbook("群發工資條.xlsx",data_only=True) sheet=wb.active print(sheet) ------------------------------------------------------- forrowinsheet: row_text="" forcellinrow: ifcell.column=="B": continue row_text+=f"{cell.value}," print(row_text) ------------------------------------------------------ print("年:",date.today().year) print("月:",date.today().month) print(f"{date.today().year}-{date.today().month}月")
結果如下:
3)登入郵箱
yagmail.register("[email protected]","flmyucvntuvbjbcb")
pwd=keyring.get_password("yagmail","[email protected]")
yag=yagmail.SMTP(user="[email protected]",host="smtp.qq.com",password=pwd)
需要注意的是:第一行程式碼是用於儲存你的郵件地址和密碼。第二行程式碼使用keyring是為了記錄你的郵件地址和密碼。第三行程式碼直接登入郵箱。
關於Python怎麼傳送郵件,我之前寫了一篇文章,進行了詳細的介紹,下方是這篇文章的連結,大家可以參考。
Python發郵件:http://suo.im/60ylZ1
4)準備要傳送的正文
由於傳送的正文裡面,需要我們傳送一個帶表格的郵件,這就有必要我們瞭解一點前端知識。因此,我在最後面花一個章節為大家講解。
5)傳送郵件
yag.send(f"{email}",f"資料分析與統計學之美有限公司{date.today().year}-{date.today().month}月工資情況",contents)
上述程式碼共有3個引數:第一個引數是收件人的郵箱;第二個引數是郵件的標題;第三個引數是傳送的內容。
3.關於html程式碼的特別說明
會用Python傳送郵件的人都知道,郵件正文內容可以寫html程式碼。你可能覺得自己啥也不會,但是不用擔心,我們不需要學習太高深的前端程式碼,做過爬蟲的人耳濡目染,都能夠看懂一些。
1)自己寫一個簡單的前端程式碼
我們可以直接用Pycharm建立一個新的html檔案,裡面會顯示初始的前端程式碼,我們進行簡單的新增,就可以獲得一個表格啦!
最終在瀏覽器中顯示效果如下:
從上圖中根本看不出這是一個表格,那是因為我們沒有為它設定一個樣式,下面要做的就是為表格設定樣式。
最終在瀏覽器中顯示效果如下:
2)在Python中怎麼寫前端程式碼
從上圖可以看出,整個前端程式碼就是用一些列的標籤組成,同時標籤都是成對出現的。因此,在Python中寫前端程式碼時,只需要在對應位置新增對應的標籤即可。
forrowinsheet:
row_text="<tr>"
forcellinrow:
ifcell.column=="B":
continue
row_text+=f"<td>{cell.value}</td>"
row_text+="</tr>"
print("\n")
print(row_text)
結果如下:
4.完整程式碼
為了文章的完整性,我在文章最後放上我的程式碼。但是限於文章篇幅,最後我只貼上一張圖片,詳細程式碼,大家可以去文末獲取。