目 录CONTENT

文章目录

Python自动生成绩效考核表并发送邮件

慧行说
2019-01-07 / 1 评论 / 0 点赞 / 1,151 阅读 / 822 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-05-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

相信大家经常在工作中见到一些数据报告,比如周报啊,月报啊,绩效考核表之类的数据表格,这些表格每个月我们都需要发送给固定的人,比如领导,对于这些报告,有的需要手工导入数据,而有的其实都是一些固定数据,所以我就针对相对固定的数据来进行分析,如何让程序自动生成绩效考核表并发送邮件给领导。项目思路如下(列表页无法查看flowchart,详情页正常):

st=>start: 开始
e=>end: 结束
op1=>operation: 获取表格
op2=>operation: 修改表格
op3=>operation: 发送邮件

st->op1(right)->op2(right)->op3->e

首先利用python的openpyxl库获取表格内容,然后同样适用该库对数据进行修改,修改日期为当前日期。修改好之后保存一份;然后利用email库发送带有附件的邮件,最后再利用电脑或者服务器的定时任务执行当前脚本即可。下面是源码:

获取表格/修改数据

利用openpyxl.load_workbook函数导入表格,然后读取sheet。利用cell函数修改指定行的内容,比如下方我修改了第2行,第8列的数据,将日期修改成了当前日期,然后最后保存到了本地。

# _*_ 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')

发送邮件

# 发送邮件
def send_email():

    from_addr = 'email@domain.com'
    password = 'thisispassword'
    to_addr = 'receive@domain.com'
    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发送邮件

0

评论区