目录
利用python自动化办公模块+sever酱实现排班信息微信自动推送提醒,方便广大朋友们知道自己的岗位班次
1、根据自己所在公司的轮班制度确认好员工的排班(本文以excel排班为例),如图:
2、编写排班相关代码:
#导入模块
import datetime
import xlrd
from xlrd import xldate_as_tuple
# 解析excel文件
def read_excel(filename, name, to_date):
# 打开文件
workbook = xlrd.open_workbook(filename)
# 获取所有sheet
# print(workbook.sheet_names())
sheetname = workbook.sheet_names()[0]
# 根据sheet索引或者名称获取sheet内容
ws = workbook.sheet_by_name(sheetname)
context = []
# 获取单元格内容
# j = 2 早班 3 正常班 4 正常班2 5 夜班 6 休息 7 巡检
for i in range(ws.nrows):
if ws.cell(i, 0).ctype == 3:
date = datetime.datetime(*xldate_as_tuple(ws.cell(i, 0).value, 0)).strftime('%m-%d')
#to_date = '3-24'
if date == to_date:
for j in range(ws.ncols):
if ws.cell(i, j).ctype == 3:
date = datetime.datetime(*xldate_as_tuple(ws.cell(i, 0).value, 0))
context.append("%s月%s日" % (date.strftime('%m'), date.strftime('%d')))
#print(date)
elif name in ws.cell(i, j).value:
if j == 2:
context.append("早班")
elif j == 3:
context.append("正常班")
elif j == 4:
context.append("正常班2")
elif j == 5:
if ws.cell(i, 7).value != '':
context.append("夜班,记得巡检")
else:
context.append("夜班")
elif j == 6:
text = "明天休息"
d = 1
if name in ws.cell(i + d, j).value:
while True:
if name in ws.cell(i + d, j).value:
d = d + 1
else:
break
context.append("连休" + str(d) + "天哦")
else:
context.append("休息")
return context
3、设置排班提醒
#导入模块
import os
import sys
import requests
# 发送相关信息
def send_Wechat():
# 获取当天与第二天的日期
tomorrow = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%m-%d')
today = datetime.datetime.today().strftime('%m-%d')
# 遍历当前目录文件名
# 获取当前月份
month = "%s月" % datetime.datetime.now().strftime('%m')
filename = ""
filename1 = ""
for dir in os.listdir(sys.path[0] + '/'):
if month in dir:
filename = dir
filename1 = dir
# 跨月度切换班表
if "%s月" % (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%m') != month:
for dir in os.listdir(sys.path[0] + '/'):
if "%s月" % (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%m') in dir:
filename1 = dir
person = get_name()
# 遍历所有人员并发送相关信息
for p in person:
name = p[0]
KEY = p[1]
today_info = read_excel(filename, name, today)
#print(today_info)
today_context = ""
for text in today_info:
today_context = today_context + " " + text
tomorrow_info = read_excel(filename1, name, tomorrow)
# print(tomorrow_info)
tomorrow_context = ""
for text in tomorrow_info:
tomorrow_context = tomorrow_context + " " + text
context = '''> 今天是:''' + today_context + \
'''\n> 明天是:''' + tomorrow_context
title = "今日班次"
URL = "http://sc.ftqq.com/" + KEY + ".send?text=" + title + "&desp=" + context
# print(URL)
requests.post(URL)
4、获取Sever酱调用代码生成SCKEY
# 获取人员列表
def get_name():
xml = sys.path[0] + '/name.xml'
root = etree.parse(xml)
person = []
for names in root.getroot():
module = etree.ElementTree(names)
name = module.xpath('//names/@name')[0]
for k in names:
key = k.text
person.append([name, key])
return person
完整代码如下
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# __author__ :
# date : 2020/09
# version: 2.0
import datetime
import os
from lxml import etree
import requests
import sys
import xlrd
from xlrd import xldate_as_tuple
import weather
# 解析excel文件
def read_excel(filename, name, to_date):
# 打开文件
workbook = xlrd.open_workbook(filename)
# 获取所有sheet
# print(workbook.sheet_names())
sheetname = workbook.sheet_names()[0]
# 根据sheet索引或者名称获取sheet内容
ws = workbook.sheet_by_name(sheetname)
context = []
# 获取单元格内容
# j = 2 早班 3 正常班 4 正常班2 5 夜班 6 休息 7 巡检
for i in range(ws.nrows):
if ws.cell(i, 0).ctype == 3:
date = datetime.datetime(*xldate_as_tuple(ws.cell(i, 0).value, 0)).strftime('%m-%d')
#to_date = '3-24'
if date == to_date:
for j in range(ws.ncols):
if ws.cell(i, j).ctype == 3:
date = datetime.datetime(*xldate_as_tuple(ws.cell(i, 0).value, 0))
context.append("%s月%s日" % (date.strftime('%m'), date.strftime('%d')))
#print(date)
elif name in ws.cell(i, j).value:
if j == 2:
context.append("早班")
elif j == 3:
context.append("正常班")
elif j == 4:
context.append("正常班2")
elif j == 5:
if ws.cell(i, 7).value != '':
context.append("夜班,记得巡检")
else:
context.append("夜班")
elif j == 6:
text = "明天休息"
d = 1
if name in ws.cell(i + d, j).value:
while True:
if name in ws.cell(i + d, j).value:
d = d + 1
else:
break
context.append("连休" + str(d) + "天哦")
else:
context.append("休息")
return context
# 发送相关信息
def send_Wechat():
# 获取当天与第二天的日期
tomorrow = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%m-%d')
today = datetime.datetime.today().strftime('%m-%d')
# 遍历当前目录文件名
# 获取当前月份
month = "%s月" % datetime.datetime.now().strftime('%m')
filename = ""
filename1 = ""
for dir in os.listdir(sys.path[0] + '/'):
if month in dir:
filename = dir
filename1 = dir
# 跨月度切换班表
if "%s月" % (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%m') != month:
for dir in os.listdir(sys.path[0] + '/'):
if "%s月" % (datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%m') in dir:
filename1 = dir
# 获取当天天气
# wea = ""
# for x in weather.WeatherIterable(['广州']):
# wea = x
# 获取需要发送人员名单
person = get_name()
# 遍历所有人员并发送相关信息
for p in person:
name = p[0]
KEY = p[1]
today_info = read_excel(filename, name, today)
#print(today_info)
today_context = ""
for text in today_info:
today_context = today_context + " " + text
tomorrow_info = read_excel(filename1, name, tomorrow)
# print(tomorrow_info)
tomorrow_context = ""
for text in tomorrow_info:
tomorrow_context = tomorrow_context + " " + text
context = '''> 今天是:''' + today_context + \
'''\n> 明天是:''' + tomorrow_context
title = "今日班次"
URL = "http://sc.ftqq.com/" + KEY + ".send?text=" + title + "&desp=" + context
# print(URL)
requests.post(URL)
# 获取人员列表
def get_name():
xml = sys.path[0] + '/name.xml'
root = etree.parse(xml)
person = []
for names in root.getroot():
module = etree.ElementTree(names)
name = module.xpath('//names/@name')[0]
for k in names:
key = k.text
person.append([name, key])
return person
if __name__ == '__main__':
send_Wechat()
# test()
最后,想要添加天气提醒可在代码块导入相关模块
import weather
联系我们,一起学Python吧,零基础入门到进阶
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。
微信群(关注「Python家庭」一起轻松学Python吧)
个人微信(备注来意,学习交流,聊聊人生~)