用Python 給財務寫了個「羣發工資條」,效果不錯

做者 | 黃偉呢

來源 | 數據分析與統計學之美(ID:gh_21c25c7e71d0)


本文介紹

這是一個很好的 Python 自動化的案例。對於小公司,採用手動方式一個個發送郵件仍是能夠的。若是一個上百號,上千號,或者更大規模的公司,咱們再一個個發送工資條郵件,就太浪費時間了。鑑於此,我寫了一個這樣的程序,實現 Python 自動化羣發工資條的功能。php

原始數據源以下:html

最終效果以下:前端

看到這裏,你確定也以爲很好玩兒吧?那麼這樣一個自動化程序,應該怎麼作呢?接着往下看。算法


流程分析

其實這樣一個代碼,總結下來,就只有以下5步:
① 導入相關模塊;
② 讀取 Excel 表格;
③ 登陸郵箱;
④ 準備要發送的郵件正文;
⑤ 發送郵件;
瀏覽器

1)導入相關模塊

from openpyxl import load_workbook    # 用於操做Excel的模塊
import yagmail   # 用於存儲郵箱地址和密碼的模塊
import keyring   # 用於記錄你郵箱地址和密碼的模塊
from datetime import *   # 用於獲取當前系統時間的模塊

2)讀取 Excel 表格

# 加載Excel文件
wb = load_workbook("羣發工資條.xlsx",data_only=True)
sheet = wb.active
print(sheet)
-------------------------------------------------------
for row in sheet:
    row_text = ""
    for cell in row:
        if cell.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("1127421544@qq.com","flmyucvntuvbjbcb")
pwd = keyring.get_password("yagmail","1127421544@qq.com")
yag = yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com",password=pwd)

須要注意的是:第一行代碼是用於存儲你的郵件地址和密碼。第二行代碼使用 keyring 是爲了記錄你的郵件地址和密碼。第三行代碼直接登陸郵箱。安全

關於 Python 怎麼發送郵件,我以前寫了一篇文章,進行了詳細的介紹,下方是這篇文章的連接,你們能夠參考。
機器學習

Python 發郵件:http://suo.im/60ylZ1ide

4)準備要發送的正文學習

因爲發送的正文裏面,須要咱們發送一個帶表格的郵件,這就有必要咱們瞭解一點前端知識。所以,我在最後面花一個章節爲你們講解。大數據

5)發送郵件

yag.send(f"{email}",f"數據分析與統計學之美有限公司{date.today().year}-{date.today().month}月工資狀況",contents)

上述代碼共有3個參數:第一個參數是收件人的郵箱;第二個參數是郵件的標題;第三個參數是發送的內容。


關於html代碼的特別說明

會用 Python 發送郵件的人都知道,郵件正文內容能夠寫 html 代碼。你可能以爲本身啥也不會,可是不用擔憂,咱們不須要學習過高深的前端代碼,作過爬蟲的人耳濡目染,都可以看懂一些。

1)本身寫一個簡單的前端代碼

咱們能夠直接用 Pycharm 建立一個新的 html 文件,裏面會顯示初始的前端代碼,咱們進行簡單的添加,就能夠得到一個表格啦!

最終在瀏覽器中顯示效果以下:

從上圖中根本看不出這是一個表格,那是由於咱們沒有爲它設置一個樣式,下面要作的就是爲表格設置樣式。

最終在瀏覽器中顯示效果以下:

2)在 Python 中怎麼寫前端代碼

從上圖能夠看出,整個前端代碼就是用一些列的標籤組成,同時標籤都是成對出現的。所以,在 Python 中寫前端代碼時,只須要在對應位置添加對應的標籤便可。

for row in sheet:
    row_text = "<tr>"
    for cell in row:
        if cell.column == "B":
            continue
        row_text += f"<td>{cell.value}</td>"
    row_text += "</tr>"
    print("\n")
    print(row_text)

結果以下:

完整代碼

爲了文章的完整性,我在文章最後放上個人代碼。可是限於文章篇幅,最後我只粘貼一張圖片。


更多精彩推薦
☞征戰雲時代,爲何安全是關鍵命題?
☞華爲麒麟成「絕唱」,造芯太難了!
☞16歲開寶馬,19歲創立本身的電腦公司,戴爾傳奇
☞算法實現太難了?機器學習也須要開源軟件
☞數據平臺、大數據平臺、數據中臺……傻傻分不清?此次終於有人講明白了!
☞當心!你可能玩了假的DeFi
點分享點點贊點在看