python_for_hrm:读取花名册员工身份证信息,通过企业微信机器人提醒人事做生日准备

前期准备:

  1. 在企业微信群聊里面添加机器人,获取Webhook地址

  1. 脚本工作目录下准备花名册文件,如果有入离职记得更新

  1. 设置windows定时任务(可参考:https://jingyan.baidu.com/article/9080802200cc15fd91c80fcf.html

测试截图:

脚本代码:

# -*- coding: utf-8 -*-
import os
import re
import sys
import xlrd
import time
import datetime
import requests
import json
from plyer import notification

Webhook = "" #Webhook地址

def window_send(text,second):
    notification.notify(
        title="🎂生日提醒助手",
        message=text,
        app_icon="",
        timeout=second
    )

def right_send(birth_today,birth_nextday):
    oWX_URL = Webhook
    sent_msg = {
        "msgtype": "markdown",  
        "markdown": {
            "content": f'''<font color="warning">🎂生日提醒助手</font>\n> 今日生日:\n<font color="comment">{birth_today}</font>\n> 明日生日:\n<font color="comment">{birth_nextday}</font>'''
        }
    }
    print(sent_msg)
    headers = {'Content-Type': 'application/json'}  
    try:
        r = requests.post(url=oWX_URL, data=json.dumps(sent_msg), headers=headers, timeout=5)
    except Exception as e:
        print(e.args[0])
def wrong_send(text):
    oWX_URL = Webhook
    sent_msg = {
        "msgtype": "markdown",  
        "markdown": {
            "content": f'''<font color="warning">🎂生日提醒助手</font>\n> 注意:\n<font color="Blue">{text}</font>\n>'''
        }
    }
    print(sent_msg)
    headers = {'Content-Type': 'application/json'}  
    try:
        r = requests.post(url=oWX_URL, data=json.dumps(sent_msg), headers=headers, timeout=5)
    except Exception as e:
        print(e.args[0])
def main():
    if not os.path.isdir("history"):
        os.mkdir("history")
    open(f"./history/{str(datetime.datetime.today()).split(' ')[0]}","w+")
    print("注意事项:\n文件夹下有文件名包含“花名册”的表格,且存在“在职员工”sheet\n标题行必须包含“姓名”,“证件号”或者“身份证”\n如果今明两日有人过生日才会发送消息提醒...")
    num = 0
    #print(os.path.dirname(os.path.realpath(sys.executable)))
    print(os.path.dirname(os.path.realpath(sys.argv[0])))
    files = os.listdir(os.path.dirname(os.path.realpath(sys.argv[0])))
    print(files)
    print(re.findall('花名册',str(files)))
    print(str(re.findall('花名册',str(files))))
    if re.findall('花名册',str(files)) == []:
        wrong_send("目录下没有文件名包含“花名册”的文件...")
        time.sleep(15)
    try:
        for file in files:
            if '花名册' in file:
                workbook = xlrd.open_workbook(str(os.path.dirname(os.path.realpath(sys.argv[0])))+ "/" + file)
                print("目录下有此花名册:" + str(file))
                sheet = workbook.sheet_by_name('在职员工')
                row_1 = sheet.row_values(0)
                print(row_1)
                if '证件号' in row_1:
                    a = row_1.index('证件号')
                elif '身份证' in row_1:
                    a = row_1.index('身份证')
                b = row_1.index('姓名')
                birth_today = ""
                birth_nextday = ""
                for i in range(1, sheet.nrows):
                    row_i = sheet.row_values(i)
                    name = row_i[b]
                    id_num = str(datetime.datetime.today().year) + row_i[a][10:14]
                    if len(id_num) == 8:
                        birth_date = datetime.datetime.strptime(id_num, '%Y%m%d').date()
                        #今日生日
                        if birth_date == datetime.date.today():
                            birth_today = birth_today + row_i[b] + ':' + str(birth_date) + '\n'
                            num += 1
                        #明日生日
                        elif birth_date == datetime.date.today() + datetime.timedelta(days=1):
                            birth_nextday =birth_nextday + row_i[b] + ':' + str(birth_date) + '\n'
                            num += 1
                print(num)
                if num != 0:
                    birth_today = birth_today.strip("\n")
                    birth_nextday = birth_nextday.strip("\n")
                    right_send(birth_today,birth_nextday)
                    try:
                        xinxi = f"今日生日:\n{birth_today}\n明日生日:\n{birth_nextday}"
                        window_send(xinxi,600)
                    except Exception as e:
                        print(e.args[0])
                else:
                    print("没人过生日~")
                    wrong_send("最近没人过生日(推送是为了检测脚本是否每天定时运行~)")

    except Exception as e:
        print(str(e)) 
        wrong_send(str(e))

        time.sleep(15)
if __name__ == '__main__':
    main()

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值