终于,手把手教会 HR 实现 Python + Excel 「邮件自动化」发工资条了
想知道,怎样才能跟公司 HR 的关系处得更好嘛?
其实很简单,身怀绝技的我们,时刻都要提醒自己,要主动、热情地去帮助他人,世界才会更美丽,桃花才会朵朵开。
你看,每个月 HR 她都需要人肉去给所有同事发工资条,看着是不是就挺惨的?!
但……你是谁?你是技术大神啊,无所不能的,对吧?
抓住我,哦,不对,抓住机会,赶紧手把手教她用 Python 来实现批量发送工资条吧。你帮她提升了工作效率,不就可以提前下班了嘛,然后……那,你不就可以……
请仔细听题~
如果你们公司有 1000 人,每个月可爱的 HR 都会从财务那儿,拿到了所有人的工资数据,接着,我们应该怎么来处理呢?
其实,很简单,我们分两大部分跟来了解:
第一部分,使用 Pandas 处理 Excel 数据;
第二部分,设置邮箱和发送邮件。
第一部分 使用 Pandas 处理 Excel 数据
开始咯,咱先来看看,如何读取 Excel 数据,还有过滤数据。
比如,我们的工资表中,有一列是员工的姓名,如果我想根据他的名字,单独把他的信息提取出来,然后再生成新的 Excel 文件,怎么实现呢?
其实,也很简单,具体代码如下:
import os
import pandas as pd
# 根据 Excel 文件路径,读取 Excel 数据
data = pd.read_excel('/../../工资条.xlsx')
# 指定文件夹路径
dirname = '/../../employee'
if not os.path.exists(dirname):
os.makedirs(dirname)
# 根据指定信息,过滤数据
employeeNames = ['张三', '李四', '王五']
for name in employeeNames:
# 根据指定名字读取数据
df = data.loc[data['姓名'] == name]
# 根据名字,创建了路径
filepath = os.path.join(dirname, f'{name}.xlsx')
# 创建 Excel 写入器
writer = pd.ExcelWriter(filepath)
# 转为 Excel
df.to_excel(writer, 'Sheet1')
# 保存
writer.save()
运行程序,效果如下:
第二部分 设置邮箱和发送邮件
2.1 邮件发送原理
我们先通过一张图,来简单了解下邮件发送的原理,根据标出来的序号,一共有 6 个步骤,感受一下发送邮件的整个工作流程,具体如下:
其中,SMTP 服务器,提供了邮件发送的服务。主要是帮咱们把本地的邮件,通过 SMTP 服务器,发送到对方的服务器上。
比如,用户 A 在 QQ 邮箱里写好了邮件,并通过 QQ 邮箱的服务器,将邮件发送到了 163 邮箱的服务器上,并存储在 163 邮箱内部存储空间中,等待被接收和读取。
另外,POP3 服务器,提供了邮件接收的服务。主要负责从邮箱内部存储空间中,取回并返回用户的邮件。
比如,用户 B 登录了 163 邮箱之后,就可以通过 POP3 服务器接收到自己的邮件了。
2.2 设置第三方邮件服务器
如果你们公司有可以访问公网的邮件服务器,那就直接用,要不,咱就直接用第三方的邮件服务器,比如 126 邮箱、163 邮箱、QQ 邮箱……都可以,设置细节几乎一样。
需要做一点点设置,非常简单的,我以 126 邮箱作为参考案例,登录邮箱后,在「设置」中,选择「POP3/SMTP/IMAP」,具体如下:
接下来的步骤,非常重要:
第一,开启服务;
第二,申请授权码(注意,只会显示一次,记录并保存好,旧的也可以删掉重新申请);
第三,SMTP 的服务器地址。
如何发送邮件?很简单的,我们先来分析一下步骤:
第一,我们需要用到 yagmail、datetime、pandas
等模块儿,直接导入使用。
其中,yagmail
用来操作邮箱,工资条需要通过邮箱发送给所有员工,datetime
是用来获取当前系统的时间,最后的 pandas
是用来操作 Excel 数据;
第二,我们先使用 Pandas 来读取 Excel 中的数据,备用;
第三,安装并导入 yagmail,然后用它来操作邮箱,安装命令 pip install yagmail
;
第四,编辑、准备好要发送的邮件的内容;
第五,发送邮件。
注意:实际上,不同企业所出具的工资条明细,是不完全一样的,各有各的特色和细节。但基本上,都会包含个人信息、基本薪资、奖金提成、出勤、五险一金、实发金额等。下面案例中,我们将采用一份简化版的工资条信息进行演示。
import yagmail
import pandas as pd
from datetime import *
# 读取文件
df = pd.read_excel('/../../工资条.xlsx')
# 登录邮箱
# user 邮箱账号
# password 邮箱登录授权码
# host 邮箱 SMTP 服务器地址
yag = yagmail.SMTP(user="xxx@126.com", password='xxxxxxxx', host='smtp.126.com')
# 开启循环,读取数据
for index, rows in df.iterrows():
# 对数据进行位置索引,从而在数据表中提取出相应的数据
# [[index], :9] 表示我们截取前 9 列数据
# to_html() 用于将结果转换成 html 代码
table = df.iloc[[index], :9].to_html(header = True, index = False, border = "1px")
table.replace("\n", "")
# 拼接表格
# 根据自己喜好,加上样式,可以更好看
table_style = '<style>table{cellpadding :"0"; border-collapse:collapse;} th{width:11.1%; background-color:#FFB90F; text-align:center;} td{text-align:center;}</style>'
# 邮件内容
contents = [f"亲爱的 {rows['姓名']} 同事,你好:\n",
f"\t很开心,咱又奋战了一个月,工资已发放,请查收你 {date.today().year} 年 {date.today().month} 月的工资明细,\n\t如有疑问请及时与人事部门进行沟通,辛苦啦!", table_style + table]
# 发送邮件
yag.send(rows['邮箱'], f"{date.today().year} 年 {date.today().month} 月的工资明细", contents)
运行了代码后,在邮箱中,我们就可以看到个人的工资条信息了:
如果,您也学会了,欢迎来一个「三连」鼓励下呗,点赞、关注、转发,谢谢!
相关文章
- [Python]架设python虚拟环境以及部署PythonWeb服务
- Python 日期和时间_python 当前日期时间_python日期格式化
- Python的dict字典结构操作方法学习笔记
- Python中使用第三方库xlrd来写入Excel文件示例
- Python 日期和时间_python 当前日期时间_python日期格式化
- 如何在 Python 中自动化处理 Excel 表格?
- python程序员都在用到5个酷毙的Python工具
- Python:利用python语言实现18位身份证号码和15位身份证号码相互转换
- Wps:wps中excel表格数据整理常用技巧—利用wps表格实现自动填充等差数列然后预测数值、将python语言中的列表格式数据存为excel内
- Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略
- 成功解决将python的列表格式输出数值(如pandas.read_excel().describe())批量转到表格内
- Python语言编程学习:利用python输出当前python版本、MSC版本型号
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
- Python之ffmpeg-python:ffmpeg-python库的简介、安装、使用方法之详细攻略
- Python基础——PyCharm版本——第八章、文件I/O(核心3、csv和excel解析)
- 已解决Python pandas.read_excel读取Excel文件报错
- 未来各职业的人,都会涌入Python和AI大潮中,老教授深度解析
- 〖Python自动化办公篇⑫〗- Excel 文件自动化 - 读取 excel 数据
- 〖Python接口自动化测试实战篇⑧〗- 小案例 - 使用python实现接口请求 [查询天行数据]
- Python-Excel 模块哪家强 #华为云·寻找黑马程序员#
- Python 装饰器之 functools.wraps
- 【华为机试真题 Python实现】一个正整数到 Excel 编号之间的转换
- Python开发案例之用Python子进程关闭Excel自动化中的弹窗
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 〖Python自动化办公篇⑫〗- Excel 文件自动化 - 读取 excel 数据
- 〖Python自动化办公篇⑬〗- Excel 文件自动化 - 写入 excel 数据(xlsxwriter)
- python零基础学编程:Python是什么?为什么Python这么火,学Python能干什么?
- 【Python 实战】---- 批量修改文件名和将txt转excel
- Excel 2016 突然打开别人发过来的2个excel文件就关闭打不开,打开电脑上其他excel文件正常
- Python开发案例之用Python子进程关闭Excel自动化中的弹窗