闲着无聊整个统计钉钉员工正常出勤天数的小程序。

闲着无聊整个统计钉钉员工正常出勤天数的小程序。

废话不多说,直接上干货!

首先用QT设计师设计以下简单的页面,生成ui文件,再使用pyuic命令转换成py文件。

然后,就是敲代码的时间,以下是全部代码。。。。。

import sys
from PyQt5.QtWidgets import (
    QApplication,QFileDialog,QMessageBox,QDialog,QTableWidgetItem
)
import pandas as pd
import os
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter,column_index_from_string
from collections import Counter
from untitled import Ui_Dialog

class Attendance_Statttistics(Ui_Dialog,QDialog):
    def __init__(self,set_string) -> None:
        super().__init__()
        self.set_string = set_string
        self.setupUi(self)
        self.show()

        self.pushButton_select_file.clicked.connect(self.get_file)
        self.pushButton_count.clicked.connect(self.count)
        self.pushButton_depart_query.clicked.connect(self.depart_query)
        self.pushButton_close.clicked.connect(self.close)

    def show_msgs(self,msg):
        msgs = QMessageBox.warning(self,"信息提示",msg)
        return msgs

    def get_file(self):
        #选择文件
        self.file = QFileDialog.getOpenFileName(self,"选择文件",os.getcwd(),"xlsx(*.xlsx)")[0]
        self.lineEdit_select_file.setText(self.file)

    def count(self):
        try:
            df = pd.read_excel(self.file,sheet_name="原始记录",header=2)
            df = df[["姓名","考勤组","考勤日期","打卡结果"]]
            #删除包含特定内容的所有行
            for i in self.set_string:
                df = df[-df['打卡结果'].isin([i])]
            df = df[-df['考勤组'].isin(['未加入考勤组'])]
            df['打卡结果'] = df['打卡结果'].replace('补卡审批通过','正常')
            #删除表格中的重复行
            df = df.drop_duplicates()
            df_1 = df.copy()
            df_1 = df_1[["姓名","考勤组"]].drop_duplicates()
            df_1.to_excel("./kaoqin.xlsx",index=False)
            #考勤组去重并转为列表类型
            depart = df["考勤组"].drop_duplicates().tolist()
            #print(depart)
            self.comboBox_department.addItems(depart)
            #统计出勤天数转成字典类型
            name_list = []
            [name_list.append(i) for i in df['姓名']]
            self.dir_list = dict(Counter(name_list))
            #print(self.dir_list)
            df_kaoqin = pd.read_excel("./kaoqin.xlsx")
            names = []
            days = []
            for i,j in self.dir_list.items():
                names.append(i)
                days.append(j)
            zip_tuples = zip(names,days)
            df_data = pd.DataFrame(zip_tuples,columns=["姓名","出勤天数"])
            self.df_merge = pd.merge(left=df_kaoqin,right=df_data,left_on="姓名",right_on="姓名")
            #print(self.df_merge)
            self.tableWidget_show_datas.setRowCount(len(self.df_merge))
            row_num = 0
            for idx,row in self.df_merge.iterrows():
                for col,value in enumerate(["姓名","考勤组","出勤天数"]):
                    self.tableWidget_show_datas.setItem(
                        row_num,col,
                        QTableWidgetItem(str(row[value]))
                    )
                row_num += 1
        except Exception as e:
            self.show_msgs(f"请正确选择文件!{e}")

    def depart_query(self):
        try:
            depart_text = self.comboBox_department.currentText()
            #print(depart_text)
            df_select = self.df_merge.loc[self.df_merge["考勤组"] == depart_text]
            self.tableWidget_show_datas.setRowCount(len(df_select))
            row_num = 0
            for idx,row in df_select.iterrows():
                for col,value in enumerate(["姓名","考勤组","出勤天数"]):
                    self.tableWidget_show_datas.setItem(
                        row_num,col,
                        QTableWidgetItem(str(row[value]))
                    )
                row_num += 1
        except Exception as e:
            self.show_msgs(f"请先执行全表统计后再尝试部门查询操作!{e}")

    def close(self):
        path = ["./kaoqin.xlsx"]
        for i in path:  
            if os.path.exists(i):
                os.remove(i)
        sys.exit()

if __name__ == "__main__":

    #定义需要删除行内所包含的字符内容set_string列表
    set_string = ['打卡无效:管理员设置上班后1小时才能打下班卡',
    '打卡无效:已经打过卡了,上班时间以最早打卡时间为准','打卡无效:今日休息,打卡需申请',
    '打卡无效:已经打过卡了,下班时间以最晚打卡时间为准','打卡无效:当前不在可打卡的时间范围,请和管理员联系',
    '打卡无效:此记录已被更新','打卡无效:未到最早上班时间,请在01:00后打卡','打卡无效:下班打卡时间已过',
    '迟到','早退','请假','加班','打卡无效:管理员设置上班后8小时才能打下班卡']

    app = QApplication(sys.argv)
    job = Attendance_Statttistics(set_string)
    sys.exit(app.exec_())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值