Fork me on GitHub

Python自動生成績效考核表并發送郵件

相信大家經常在工作中見到一些數據報告,比如周報啊,月報啊,績效考核表之類的數據表格,這些表格每個月我們都需要發送給固定的人,比如領導,對于這些報告,有的需要手工導入數據,而有的其實都是一些固定數據,所以我就針對相對固定的數據來進行分析,如何讓程序自動生成績效考核表并發送郵件給領導。項目思路如下(列表頁無法查看flowchart,詳情頁正常):

首先利用python的openpyxl庫獲取表格內容,然后同樣適用該庫對數據進行修改,修改日期為當前日期。修改好之后保存一份;然后利用email庫發送帶有附件的郵件,最后再利用電腦或者服務器的定時任務執行當前腳本即可。下面是源碼:

獲取表格/修改數據

利用openpyxl.load_workbook函數導入表格,然后讀取sheet。利用cell函數修改指定行的內容,比如下方我修改了第2行,第8列的數據,將日期修改成了當前日期,然后最后保存到了本地。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# _*_ coding:utf-8 _*_
import openpyxl
import time
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart

# 通過openpyxl與time庫修改績效表中日期為當前時間
def write_excel():
# 讀取excel
wb = openpyxl.load_workbook('jixiaokaohe.xlsx')
worksheet = wb['sheet名稱']

# 修改指定行數據并保存到本地
worksheet.cell(2, 8, str(time.strftime('%Y.%m.%d', time.localtime())))
wb.save(filename='jixiaokaohe.xlsx')

發送郵件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 發送郵件
def send_email():

from_addr = '[email protected]'
password = 'thisispassword'
to_addr = '[email protected]'
smtp_server = 'smtp.exmail.qq.com'

# 創建一個帶附件的實例
msg = MIMEMultipart()
msg['From'] = Header("發送者名稱", 'utf-8')
msg['To'] = Header("接受者名稱", 'utf-8')
subject = '郵件標題'
msg['Subject'] = Header(subject, 'utf-8')

# 郵件正文內容
msg.attach(MIMEText("你好:<p>詳情見附件!</p>", 'html', 'utf-8'))

# 構造附件1
att1 = MIMEText(open('jixiaokaohe.xlsx', 'rb').read(), 'base64', 'utf-8')
# 這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字
att1["Content-Disposition"] = 'attachment; filename="jixiaokaohe.xlsx"'
msg.attach(att1)

# 服務端配置,賬密登陸
server = smtplib.SMTP(smtp_server, 25)

# 登陸服務器
server.login(from_addr, password)

try:
server.sendmail(from_addr, [to_addr], msg.as_string()) # 發送地址需與登陸的郵箱一致
print("郵件發送成功!")
server.quit()
except smtplib.SMTPException:
print("Error: 無法發送郵件")

def start():
write_excel()
send_email()

start()

到這里為止,腳本就寫完了,寫起來很簡單,最后一步就是找個合適的時候執行這個腳本,沒有服務器的,可以用自己本機電腦做一個定時計劃任務,然后定時執行該腳本即可。

參考資料
python 使用騰訊企業郵箱發送郵件
Python3 SMTP發送郵件

贵州体育彩票11选5