python发微信工资条_使用python自动发放员工工资条到个人邮箱
人力资源部每个月发工资条,以前靠人工手动一条一条的复制,200多号员工,差不多需要耗费一天时间。
用python写个脚本,分分钟的事情就可以全部发送完。
我这边工资表如下图
姓名在C列,邮箱在B列。
发送完,这样显示
收到的邮件是这样
还有这样
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Hiuhung Wan
from openpyxl import load_workbook
from email.mime.text import MIMEText # 邮件正文
from email.header import Header # 邮件头
import smtplib, time
# 登录
def login(smtp_server, ssl_port, sender, passwd):
smtp_obj = smtplib.SMTP_SSL(smtp_server, ssl_port)
smtp_obj.login(sender, passwd)
return smtp_obj
# 发邮件
def send_email(smtp_obj, sender, rec_list, msg):
smtp_obj.sendmail(sender, rec_list, msg)
def op_excel(smtp_obj, filename:str):
# 加载excel文件 data_only=True,自动计算公式
wb = load_workbook(filename, data_only=True) # 使用xlsx文件,不要使用xls
sheet = wb.active
# 先取列名
table_col_name = []
for row in sheet.rows:
for cell in row:
# print(cell.value)
table_col_name.append(cell.value)
break
# 循环excel
for row in sheet.iter_rows(min_row=2):
table_col_html = '' # 表头
row_text = '
' # 开始一行
list_del = [] # 准备减掉的字段
list_finally = table_col_name[:] # 最终的字段
for cell in row:
# print(cell.value, type(cell.value)) # None 0
if cell.value == None or cell.value == 0: # 数据为零或空
# print(cell.col_idx) # 列数,从1开始数
list_del.append(table_col_name[cell.col_idx - 1])
else:
row_text += f'
{cell.value}'
row_text += '
' # 结束一行
# 去掉值为零或空的字段
for i in list_del:
list_finally.remove(i)
# 重写首行
for i in list_finally:
table_col_html += f'
{i}'
table_col_html += '
'
# 员工姓名
name = row[2].value # 从0开始数,第2列
staff_email = row[1].value # 员工邮箱地址 从0开始数,第1列
mail_body_context = f'''
{name}:你好!
请查收你2020年5月的工资条。
{table_col_html}
{row_text}
'''
msg = MIMEText(mail_body_context, 'html', 'utf-8')
msg['From'] = Header('HHHH人力资源部', 'utf-8') # 发送者
msg['To'] = Header('HHHH员工', 'utf-8') # 接收者
msg['Subject'] = Header('HHHH 2020年5月工资条', 'utf-8') # 主题
# 发邮件
try:
send_email(smtp_obj, sender, [staff_email], msg.as_string())
print(f'成功发送工资条到{staff_email}--{name}...')
except smtplib.SMTPException as e:
print('Error:无法发送邮件.Case:%s' % e)
if __name__ == '__main__':
time_start = time.time()
smtp_server = 'smtp.qq.com' # SMTP服务器
ssl_port = 465 # SMTP端口
sender = '123456789@qq.com' # 发件人邮箱
passwd = '**********' # 发件人密码
filename = "2020年5月员工工资表.xlsx"
smtp_obj = login(smtp_server, ssl_port, sender, passwd)
op_excel(smtp_obj, filename)
time_end = time.time()
print('脚本执行完毕,耗时%.3f秒。' % (time_end - time_start))
支持自动去掉值为空或为零的列。如奖金、请假等。
当然,也可以竖向排列工资条。
需要修改一下op_excel方法
def op_excel(smtp_obj, filename: str): # 操作表格
# 加载excel文件 data_only=True,自动计算公式
wb = load_workbook(filename, data_only=True) # 使用xlsx文件,不要使用xls
sheet = wb.active
# 先取列名
table_col_name = []
for row in sheet.rows:
for cell in row:
# print(cell.value)
table_col_name.append(cell.value)
break
# 循环excel
for row in sheet.iter_rows(min_row=2):
# table_col_html = '' # 表头
row_text = ''
list_del = [] # 准备减掉的字段
list_finally = table_col_name[:] # 最终的字段
list_money = [] # 金额
for cell in row:
# print(cell.value, type(cell.value)) # None
# 0
if cell.value is None or cell.value == 0: # 数据为零或空
# print(cell.col_idx) # 列数,从1开始数
list_del.append(table_col_name[cell.col_idx - 1])
else:
list_money.append(cell.value)
# 去掉值为零或空的字段
for i in list_del:
list_finally.remove(i)
# 员工姓名
name = row[1].value # 从0开始数,第2列
staff_email = row[2].value # 员工邮箱地址 从0开始数,第1列
#
添充
for index in range(len(list_finally)):
# print(list_finally[index],list_money[index])
row_text += '
' # 开始一行
row_text += f'
{list_finally[index]}'
row_text += f'
{list_money[index]}'
row_text += '
' # 结束一行
mail_body_context = f'''
{name}:你好!
请查收你2020年5月的工资条。
项目值
{row_text}
'''
msg = MIMEText(mail_body_context, 'html', 'utf-8')
msg['From'] = Header('HHHH人力资源部', 'utf-8') # 发送者
msg['To'] = Header('HHHH员工', 'utf-8') # 接收者
msg['Subject'] = Header('HHHH 2020年5月工资条', 'utf-8') # 主题
# 发邮件
try:
send_email(smtp_obj, sender, [staff_email], msg.as_string())
print(f'成功发送工资条到{staff_email}--{name}...')
except smtplib.SMTPException as e:
print('Error:无法发送邮件.Case:%s' % e)
效果如下
源码参考了alex在B站的分享。
https://www.bilibili.com/video/BV1UK4y1t7Ui?t=1395
python发微信工资条_使用python自动发放员工工资条到个人邮箱相关推荐
- python自动发微信新闻网_用python自制微信机器人,定时发送天气预报
0 引言 前段时间找到了一个免费的天气预报API,费了好段时间把这个API解析并组装成自己想用的格式了,就想着如何实现每天发送天气信息给自己.最近无意中发现了wxpy库,用它来做再合适不过了.以下是w ...
- 用python刷微信阅读_使用python让微信读书自动翻页
微信读书目前是朋友圈最流行的一款读书app,但是很遗憾微信读书没有自动翻页模式,不过这可难不倒程序员,写个程序让它自动翻页不久好了. 而且微信读书有这样一个激励政策:"每阅读30分钟可兑1赠 ...
- python接收微信消息_【Python写微信防撤回脚本】02 接收记录聊天信息
上一期我们安装好了ItChat,并且学会用它登录微信.想知道它还能做什么?往下滑吧~ 接收好友信息 利用ItChat登录微信之后,我们就可以自动记录好友发来的信息. 话不多说,直接上代码: impor ...
- 用python创建微信机器人_用Python创建微信机器人
原标题:用Python创建微信机器人 文/裸睡的猪哥 图片来源于网络 微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一 ...
- python发朋友圈_用 Python 发一个高逼格的朋友圈
原标题:用 Python 发一个高逼格的朋友圈 源 /痴海文 /痴海 分享一个非常骚气的发朋友圈姿势.效果如下. 利用今天教给大家的 python 脚本,把一张图重新分隔成 9 张.上传到朋友圈,最后 ...
- python调用微信客户端_用Python编写的简化版微信客户端
原标题:用Python编写的简化版微信客户端 原文:A simple WeChat client written in Python supports session persistence. 翻译: ...
- python发微信红包_微信公众号开发小记——5.python微信红包
描述 有时候产品有这么一些需求,当用户满足一定条件时,给他发一定金额的红包. 微信各个服务是独立的,比较蛋疼,要用红包功能,首先你需要注册一个微信商户平台账号. 代码位置 分支pay-20160802 ...
- python发微信红包_微信现金红包 python
redpack ={'success': '发放红包成功','error': '出现问题,请重试','repeat': '你已经领取过该红包,请勿重复领取','actError': '活动无效'} a ...
- python爬微信头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法
初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 import itchat im ...
最新文章
- Linux Centos 7 安装配置nginx
- 向访客和爬虫显示不同的内容
- python之父-Python之父宣布退休,但Python仍在吞噬世界
- 通过Redis实现分布式锁
- C# 打开指定的文件夹 记住路径中 / 与 \ 的用法
- P7717-「EZEC-10」序列【Trie】
- 移动端自适应缩放代码
- angular 新建命令
- 20145325张梓靖 《信息安全系统设计基础》第10周学习总结
- learn go return fuction
- 爬取今日头条新闻,并导入execle中(主要用了selenium)
- 面试阿里,看这一篇就够了!
- Spring Cloud Netflix 服务注册与发现 — Eureka 入门案例
- Android 模块化开发
- ios 故事版 设定UIImageRenderingMode的方式
- Win10中如何把语言栏缩到系统托盘
- 洛谷 P2191 小Z的情书
- 阿里云服务器域名备案
- MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录
- node js 运行服务器,node.js – NodeJS服务器如何运行
热门文章
- 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题(点击多次跳转)
- 【UER #4】量子态的棋盘
- html制作课程导航页面,学成在线页面制作(HTML+CSS部分)(顶部+轮播图部分)...
- 射击末世--建造者模式
- 上海伯俊软件科技有限公司面试题
- 【Ansys】什么软件模块是DS,它和workbench、mechanical的区别在哪里?
- Elasticsearch 中为什么选择倒排索引而不选择 B 树索引
- 这次的新计算,很全能!
- 龙腾世纪:起源–最后的古代墓碑和剑圣盔甲
- 解决oracle分布式锁,2.5.2 分布式锁管理器(DLM)