python:优化一EXCEL统计用类封装一下

news2025/1/16 2:06:04

# encoding: utf-8
# 版权所有 2023 涂聚文有限公司
# 许可信息查看:
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 311
# Datetime  : 2023/9/17 5:40
# User      : geovindu
# Product   : PyCharm
# Project   : LukfookLeaveCalculation
# File      : ExportExcel.py
# explain   : 学习


import openpyxl as openws
import pandas as pd
import numpy as np
import pandasql
import os
import sys
import Common.Utils
import BLL.EmpLoyeeHolidaysGet
import Model.Employee
import Model.HolidayList
from openpyxl import load_workbook

class ExportExcelFile(object):
    """
    输出处理好的EXCEL文件

    """
    def __init__(self):
        self.sourcefile=""
        self.newfile=""

    def exportFile(self,sourcefile:str,newfile:str):
        """
        文件处理,
        :param sourcefile:源文件
        :param newfile:新文件
        :return:None
        """

        unstr = Common.Utils.Utils()
        thbll = BLL.EmpLoyeeHolidaysGet.EmpLoyeeHolidaysGet()
        dataframe1 = pd.read_excel(sourcefile)
        datarowcol = dataframe1.shape
        excelRows = datarowcol[0]  #得玻行
        excelColumns = datarowcol[1] #得到列
        titls = dataframe1.columns.to_list()
        year = thbll.getYear(titls[1])
        dmps = []
        # 姓名,工号,序号,部门 0行至3行为员工资料  第一行为标题,不算行的内容 可以切片方式GET数据
        # 序号
        idlist = []
        dataId = dataframe1.loc[0:0]
        for idx, datadd in dataId.iterrows():
            #print("[{}]: {}".format(idx, datadd))
            idlist = datadd.to_list()
            for idd in range(1, len(idlist)):
                # employvee=Model.Employee.employee()
                # employvee.EmployeeId=idd
                # dmps.append(employvee)
                print(idd)
        # 工号
        nolist = []
        dataNo = dataframe1.loc[1:1]
        for idx, dataoo in dataNo.iterrows():
            #print("[{}]: {}".format(idx, dataoo))
            nolist = dataoo.to_list()

        #print("*******工号******")
        # 部门
        deplist = []
        dataDep = dataframe1.loc[2:2]
        for idx, datapp in dataDep.iterrows():
            #print("[{}]: {}".format(idx, datapp))
            deplist = datapp.to_list()
        #print("*******部门******")

        # 姓名
        namelist = []
        dataName = dataframe1.loc[3:3]
        for idx, datann in dataName.iterrows():
            #print("[{}]: {}".format(idx, datann))
            namelist = datann.to_list()

        #print("*******姓名******")

        for i in range(1, len(namelist)):
            employvee = Model.Employee.employee()
            employvee.EmployeeId = idlist[i]
            employvee.EmployeeNo = nolist[i]
            employvee.EmployeeName = namelist[i]
            employvee.EmployeeDep = deplist[i]
            dmps.append(employvee)

        for ob in dmps:
            print(ob.EmployeeId, ob.EmployeeNo, ob.EmployeeName, ob.EmployeeDep)
        AnnualLeave=0
        Overtime=0
        DeferredHoliday=0
        SpecialLeave=0
        PersonalLeave=0
        SickLeave=0
        ChildcareLeave=0
        LateTime=0
        RegularHoliday=0

        # 内容
        mon=0
        day=0
        getdate=[]
        getHolidays=[]
        readrows=(excelRows-1)-3  #索此值从零开始,所以总数减一,再减三行统计的
        data4 = dataframe1.loc[4:readrows]  #第四行开始内空
        getrow=1
        emplist=[]
        for idx, datavalue in data4.iterrows():
            #strnum=Common.Utils.Utils.getAnnualLeave(data)

            employs = Model.Employee.employee()
            #print("[{}]: {}".format(idx, datavalue))
            slist=datavalue.tolist()
            hbll=BLL.EmpLoyeeHolidaysGet.EmpLoyeeHolidaysGet() #病假4小時_x000D_事假0.5小時 未处理


            #print(slist) #这是读取第1列的日期数据
            for i in range(0, 1):
                strvalue = str(slist[i])
                #print("get value:", strvalue.replace('nan', ''), type(strvalue))
                mon=hbll.getMonth(strvalue)
                day=hbll.getDay(strvalue)
                #print("*******时间************",mon,day)
                getdate.append(str(year)+'-'+str(mon)+'-'+str(day))


            #print(slist)
            hid=1
            for i in range(1,len(slist)):

                getdd = Model.HolidayList.HolidayList()
                getdd.HolidayDate = str(year) + '-' + str(mon) + '-' + str(day)

                #strvalue=str(slist[i]).replace(r'\s+|\\n', ' ', regex=True)  _x000D_
                #isnan=np.isnan(slist[i])
                #if(isnan):
                strvalue = str(slist[i]).replace('_x000D_', ' ')  # 规换单元格的换行符,否则处理不了正确数据
                #strvalue = str(slist[i]).replace('nan', ' ')
                #print("get value:",strvalue.replace('nan',''),type(strvalue))

                strnums = hbll.getHolidays(strvalue)  # float str
                #print("hid:",hid)
                getdd.HolidayEmpId = hid
                if(len(strnums)>0):
                    for sn in range(len(strnums)):
                        #print("str:",strnums[sn].HolidayId,strnums[sn].HolidayName,strnums[sn].WorkTime)
                        if strnums[sn].HolidayId==6:
                            AnnualLeave=AnnualLeave+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 4:
                            Overtime=Overtime+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 3:
                            DeferredHoliday = DeferredHoliday + strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 2:
                            SpecialLeave=SpecialLeave+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 5:
                            PersonalLeave=PersonalLeave+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 7:
                            SickLeave=SickLeave+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 8:
                            ChildcareLeave=ChildcareLeave+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 9:
                            LateTime=LateTime+strnums[sn].WorkTime
                        if strnums[sn].HolidayId == 1:
                            RegularHoliday=RegularHoliday+strnums[sn].WorkTime

                    getdd.Holdays = strnums
                else:
                    #print("0")
                    getdd.Holdays =[]
                hid+=1
                getHolidays.append((getdd))
            employs.EmployeeHolidays=getHolidays
            employs.EmployeeActiveDate=getdate
            getrow+=1
            # getHolidays.append(strnums)
            #print("类型:", type(datavalue))
            emplist.append((employs))


            flist=[]
            getIdAnnualLeave=[]
            fdata=('ID','工号','部门','姓名','日期','假期')
            flist.append(fdata)
            #print("date:",getdate,len(getdate))
            #print(len(getHolidays))
            #for dddd in emplist:
                #print(dddd.EmployeeId,len(dddd.EmployeeHolidays))  #emplist[0].EmployeeHolidays:
            for sd in emplist[0].EmployeeHolidays:
                fdata=(sd.HolidayEmpId,thbll.getEmplee(dmps,sd.HolidayEmpId)[0],thbll.getEmplee(dmps,sd.HolidayEmpId)[1],thbll.getEmplee(dmps,sd.HolidayEmpId)[2],sd.HolidayDate,thbll.getHoliday(sd.Holdays))
                flist.append(fdata)
                #ananuaint=thbll.getEmpleeIdAnnualLeave(sd.HolidayEmpId,emplist[0].EmployeeHolidays)
                #getIdAnnualLeave.append(ananuaint)
                #print(sd.HolidayEmpId,thbll.getEmplee(dmps,sd.HolidayEmpId)[0],thbll.getEmplee(dmps,sd.HolidayEmpId)[1],thbll.getEmplee(dmps,sd.HolidayEmpId)[2],sd.HolidayDate,thbll.getHoliday(sd.Holdays))
            #print("**************")
            #print(getIdAnnualLeave)
            #print("*************",year,"年",mon,"月","考勤合计*************")#,day,"日"
            #print("年假合计:",AnnualLeave,"小时,加班合计:",Overtime,"小时,补休合计:",DeferredHoliday,"小时,特假合计:",SpecialLeave,"小时")
            #print("事假合计",PersonalLeave,"小时,病假合计:",SickLeave,"小时,迟到合计:",LateTime,"分钟,育儿假合计:",ChildcareLeave,"小时")
            #print("例休:",RegularHoliday,"天")
            #print("*****************************************************************")
            #年假
            for sd in emplist[0].EmployeeHolidays:
                ananuaint=[sd.HolidayEmpId,thbll.getHolidayAnnualLeave(sd.Holdays)]
                getIdAnnualLeave.append(ananuaint)

            #print(getIdAnnualLeave)
            dd=thbll.getEmpleeIdAnnualLeave(1,getIdAnnualLeave)
            #print("年假 id=1 sum:",dd)
            #加班
            getIDOvertimm=[]
            for sd in emplist[0].EmployeeHolidays:
                overtimeint=[sd.HolidayEmpId,thbll.getHolidayOvertime(sd.Holdays)]
                getIDOvertimm.append(overtimeint)
            #print(getIDOvertimm)
            dov=thbll.getEmpleeIdOvertime(1,getIDOvertimm)
            #print("加班 id=1 sum:",dov)
            #补休
            getIdDeferred=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getHolidayDeferred(sd.Holdays)]
                getIdDeferred.append(defint)
            #print(getIdDeferred)
            doef=thbll.getEmpleeIdeferred(1,getIdDeferred)
            #print("补休 id=1 sum:",doef)

            #特假 SpecialLeave
            getIdSpecialLeave=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getSpecialLeave(sd.Holdays)]
                getIdSpecialLeave.append(defint)

            #事假
            getIdPersonalLeave=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getPersonalLeave(sd.Holdays)]
                getIdPersonalLeave.append(defint)

            #病假
            getIdSickLeave=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getSickLeave(sd.Holdays)]
                getIdSickLeave.append(defint)

            #迟到
            getIdLateTime=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getLateTime(sd.Holdays)]
                getIdLateTime.append(defint)



            #育儿假
            getIdChildcareLeave=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getChildcareLeave(sd.Holdays)]
                getIdChildcareLeave.append(defint)


            #例休
            getIdRegularHoliday=[]
            for sd in emplist[0].EmployeeHolidays:
                defint=[sd.HolidayEmpId,thbll.getRegularHoliday(sd.Holdays)]
                getIdRegularHoliday.append(defint)

            taum= []
            tva=("名称","合计")
            taum.append(tva)
            tva=("年假", str(AnnualLeave) + "小时")
            taum.append(tva)
            tva=("加班",str(Overtime)+"小时")
            taum.append(tva)
            tva=("补休",str(DeferredHoliday)+"小时")
            taum.append(tva)
            tva=("特假",str(SpecialLeave)+"小时")
            taum.append(tva)
            tva=("事假",str(PersonalLeave)+"小时")
            taum.append(tva)
            tva=("病假",str(SickLeave)+"小时")
            taum.append(tva)
            tva=("迟到",str(LateTime)+"分钟")
            taum.append(tva)
            tva=("育儿假",str(ChildcareLeave)+"小时")
            taum.append(tva)
            tva=("例休",str(RegularHoliday)+"天")
            taum.append(tva)
            sheetname1 = str(year) + "年" + str(mon) + "月假期"
            writer = pd.ExcelWriter(sheetname1+"明細.xlsx")  # 这里是创建了可写入不同sheet的文件
            text1 = pd.DataFrame(flist,columns=['ID','工号','部门','姓名','日期','假期'])
            text1.to_excel(writer, sheet_name=sheetname1,header=0, index=False)  # sheet命名为
            sheetname2=str(year)+"年"+str(mon)+"月合计"
            text2 = pd.DataFrame(taum) #,columns=['名称','合计']
            text2.to_excel(writer, sheet_name=sheetname2, header=0, index=False)  # sheet命名为
            text3=dataframe1;
            sheetname3=str(year) + "年" + str(mon) + "月明細"
            text3.to_excel(writer,sheet_name=sheetname3, header=0, index=False)
            #writer.sheets.update()
            writer.close()


            dataframe2 = openws.load_workbook(sourcefile)
            # Define variable to read sheet
            sheet = dataframe2.active
            setrow=datarowcol[0] #总共行
            setcol=datarowcol[1] #总共列
            #每个人的合计
            for idd in range(1, len(idlist)):
                sheet.cell(row=setrow - 1, column=1+idd).value = str(thbll.getEmpleeIdAnnualLeave(idd,getIdAnnualLeave)) + "小时"
                sheet.cell(row=setrow - 0, column=1+idd).value = str(thbll.getEmpleeIdOvertime(idd,getIDOvertimm))+"小时"
                sheet.cell(row=setrow + 1, column=1+idd).value = str(thbll.getEmpleeIdeferred(idd,getIdDeferred))+"小时"

                sheet.cell(row=setrow + 2, column=1 + idd).value = str(thbll.getEmpleeIdeferred(idd, getIdSpecialLeave)) + "小时"
                sheet.cell(row=setrow + 3, column=1 + idd).value = str(thbll.getEmpleeIdeferred(idd, getIdPersonalLeave)) + "小时"
                sheet.cell(row=setrow + 4, column=1 + idd).value = str(thbll.getEmpleeIdeferred(idd, getIdSickLeave)) + "小时"
                sheet.cell(row=setrow + 5, column=1 + idd).value = str(thbll.getEmpleeIdeferred(idd, getIdLateTime)) + "分钟"
                sheet.cell(row=setrow + 6, column=1 + idd).value = str(thbll.getEmpleeIdeferred(idd, getIdChildcareLeave)) + "小时"
                sheet.cell(row=setrow + 7, column=1 + idd).value = str(thbll.getEmpleeIdeferred(idd, getIdRegularHoliday)) + "天"

            sheet.cell(row=setrow + 2, column=1).value = "本月特假汇总时数"
            sheet.cell(row=setrow + 3, column=1).value = "本月事假汇总时数"
            sheet.cell(row=setrow + 4, column=1).value = "本月病假汇总时数"
            sheet.cell(row=setrow + 5, column=1).value = "本月迟到汇总分钟数"
            sheet.cell(row=setrow + 6, column=1).value = "本月育儿假汇总时数"
            sheet.cell(row=setrow + 7, column=1).value = "本月例休汇总天数"

            #合部汇总
            sheet.cell(row=setrow + 8, column=1).value = "年假汇总"
            sheet.cell(row=setrow + 9, column=1).value = "加班汇总"
            sheet.cell(row=setrow + 10, column=1).value = "补休汇总"
            sheet.cell(row=setrow + 8, column=2).value = str(AnnualLeave) + "小时"
            sheet.cell(row=setrow + 9, column=2).value = str(Overtime)+"小时"
            sheet.cell(row=setrow + 10, column=2).value = str(DeferredHoliday)+"小时"

            dataframe2.save(newfile) #创建新文件

调用:


    export=BLL.ExportExcel.ExportExcelFile()
    export.exportFile('2023年7月.xlsx','2023年7月new.xlsx')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSON和全局异常处理

目录 1️⃣JSON 一、什么是json? 二、与javascript的关系 三、语法格式 四、注意事项 五、总结 六,使用json 1导入pom.xml依赖 2.配置spring-mvc.xml 3. ResponseBody注解使用 创建一个web层控制器 编写ClazzBiz 实现接口 测试: …

C#,数值计算——Hashfn2的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Hashfn2 { private static ulong[] hashfn_tab { get; set; } new ulong[256]; private ulong h { get; set;…

【2023年11月第四版教材】第13章《资源管理》(第三部分)

第13章《资源管理》(第部分) 4 管理过程4.1 数据表现★★★4.2 资源管理计划★★★4.2 团队章程★★★ 5 估算活动资源 4 管理过程 组过程输入工具和技术输出规划1.规划资源管理1.项目章程2.项目管理计划(质量管理计划、范围基准&#xff09…

elasticsearch5-RestAPI操作

个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:三人行,必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud…

Python 布尔类型和比较运算符

视频版教程 Python3零基础7天入门实战视频教程 布尔( bool)表达现实生活中的逻辑,即真和假,True表示真,False表示假。 实例: # 布尔类型定义 b1 True b2 False print(f"b1{b1},类型是{type(b1)}") prin…

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测,运行环境Matlab2021b及以…

Vue3+Ts+Vite项目(第十五篇)——tailwindcss安装及使用详解,css原子化如何实现

文章目录 一、装包二、初始化2.1 终端执行如下命令2.2 postcss.config.js 文件中2.3 tailwind.config.js 文件中 三、样式文件3.1 新建 tailwind.css 文件3.2 main.ts 中引入 四、使用4.1 写入类名即可4.2 简单讲解 五、插件5.1 安装 Tailwind CSS IntelliSense5.2 使用效果 六…

系统架构设计高级技能 · 构件与中间件技术

点击进入系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 系统架构设计高级技能 构件与中间件技术 一、构件的定义二、构件系统架构特性三…

Vue ——09、路由模式,404和路由勾子

路由嵌套,参数传递及重定向 一、路由模式(有#号,跟没#号)二、404三、路由勾子四、在钩子函数中使用异步请求————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶…

STM32 CubeMx教程 -- 基础知识及配置使用教程

文章目录 前言一、STM32CubeMx 界面介绍File 界面Windows 界面Help 界面Updater Settings 界面 二、STM32CubeMx 使用教程新建工程配置RCC时钟参数配置SYS参数配置时钟树Project(工程设置)Code Generator(代码生成器)工程创建 三、…

Day46:项目-购物车案例

购物车案例 准备工作 首页默认加载,其余页面懒加载 调用defineStore方法构建store 入口main做对应配置,找指南,快速开始,把elementplus引入进来 import { createApp } from "vue"; import { createPinia } from &qu…

基于香橙派和SU-03T 使用Linux实现语音控制刷抖音

硬件介绍 SU-03T之前在小车的时候使用过,详见:语音小车---6 最终整合_mjmmm的博客-CSDN博客 按照下图进行接线: 项目需求 通过语音指令来控制安卓手机刷抖音,可以实现视频切换和点赞等功能: 1. 开机播报“你好&a…

产品经理-战略-战略的含义和层级

引言 22年老板在听我做部门人员数量汇报时,当场就给我们部门员工做能力标签,过了几天就输出了一个公司所有技术岗位的能力标签。其中有一项是战略思维,该项满分是5分,我们部门同事绝大部分人都只有2分,我自己也就3…

数据结构-leetcode-环形链表Ⅱ

有了上一篇的基础,做这一篇会相对容易些,没看上一篇的一定要去看看再来。 先看题: 解题图解: 1.首先要使快慢指针相遇 2. 代码如下: struct ListNode *detectCycle(struct ListNode *head) {struct ListNode * fasthe…

IF,AND,OR 或嵌套 IF 在 Excel 中不是逻辑函数

事情并非总是我们希望的那样。 意外的事情可能发生。 例如,假设您必须将数字相除。 尝试将任何数字除以零(0)都会产生错误。 在这种情况下,逻辑功能很方便。 在本教程中,我们将涵盖以下主题。 在本教程中,…

企业架构LNMP学习笔记53

PHP扩展安装: server01和server03上安装redis扩展: 解压编译安装: shell > tar xvf redis-4.3.0.tgz shell > cd redis-4.3.0 shell > phpize shell > ./configure && make && make install 配置文件php.ini&…

JVM——3.StringTable字符串常量池

这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先,我们来看下面的这段程序,请思考最终的输出结果。 输出结果&#xff…

网络安全(黑客)自学​

前言 作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。 计算机各领域的知识水平决定你渗透水平的上限。 【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞…

北大C++课后记录:文件读写的I/O流

前言 文件和平常用到的cin、cout流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cin、cout读键盘数据那样对文件进行读写。 读写指针 输入流的read指针 输出流的write指针 注:这里的指针并不是普…

Type-C座子ESD整改案例分析?|深圳比创达EMC

Type-C座子ESD整改案例分析?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! 近年来,Type-C座子是一个应用非常广泛的一款通讯端口,具有正反可插、更快的充电和数据传输、音频转换、接口转换…