当前位置: 首页 > 后端技术 > Python

Python自动结算工资及统计报表

时间:2023-03-25 23:52:12 Python

实例需求说明大家好,我是悦创。博客首发:https://bornforthis.cn/column/pyauto/auto_base07.html学完Excel文件的写入、读取和追加,现在来做个案例。这些要求的描述和组织如下:每个月的2日,您将收到一个Excel文件;该文件包含每个部门的员工信息;你需要在一天内完成这些报表的整理统计,然后交给领导检查并发工资;时间要快,工资迟发,同事会抱怨你;工作量还是比较大,需要解放双手,让程序来处理问题让程序快速计算每个人的工资,统计信息结合模板,《xx、xx各部门员工数据概览》生成;工资计算规定:迟到一次扣20,一个月最多扣200;简单的财务自动化结算需求,并给出了各部门的工资表文件和统计报表的模板文件。需求描述给出了简单的财务自动化结算需求,并给出了各部门工资表文件和统计报表的模板文件。截图如下:“批量生成财务报表.ipynb”包含可执行代码,执行后会自动生成5个部门的财务单据。也可以使用如下代码自动生成:#-*-coding:utf-8-*-#@Time:2022/7/1521:48#@Author:AI悦创#@FileName:demo2.py#@软件:PyCharm#@Blog:http://www.aiyc.top#@公众号:AI悦创importxlwtimportfakeimportrandomimportdatetimedefcreate_excel_file(filename,department):wb=xlwt.Workbook(filename)sheet=wb.add_sheet('sheet1')fake=faker.Faker("zh_CN")head_data=['部门','姓名','工号','工资(元)','迟到次数(次)','奖金(元)','实际工资']forheadinhead_data:sheet.write(0,head_data.index(head),head)foriinrange(1,random.randint(5,100)):sheet.write(i,0,部门)sheet.write(i,1,fake.last_name()+fake.first_name())sheet.write(i,2,"G{}".format(random.randint(1,1000)))sheet.write(i,3,random.randint(4000,16000))sheet.write(i,4,random.choice([0,0,0,1,2,3,4]))sheet.write(i,5,random.choice([200,300,400,500,600,700,800,900]))wb.save(文件名)department_name=['技术部','推广部','客服部','行政部','财务部']fordepindepartment_name:xls_name="{}-{}.xls".format(datetime.datetime.now().strftime("%Y-%m"),dep)create_excel_file(xls_name,dep)print(xls_name,"Newlycreated")下面是财务文件和模板文件的截图:在财务文件,每个User数据缺少应付工资,需要程序计算填写;使用模板文件需要对本月所有部门财务文件进行计算统计,然后将其填写到模板文件中,生成一个本月数据概览表,如下截图所示:由程序自动填写。一共有5份财务单据,每份单据的员工信息数量不定。然后开始编写代码来自动化工资结算和统计报告的任务。导入和准备库第一步是导入所需的库并生成一个时间对象。另外,文件夹中有很多文件,包括xls、ipynb等格式,所以需要指定要操作的文件名,如下代码:importdatetimeimportxlrd,xlwtfromxlutils.copyimportcopydepartment=['技术部','推广部','客服部','行政部','财务部']template_name="月报表统计模板.xls"today_datetime=datetime.datetime.now()need_process_xls=[]fordepindepartment:xls_name="{}-{}.xls".format(datetime.datetime.now().strftime("%Y-%m"),dep)need_process_xls.append(xls_name)print(need_process_xls)#output:['2022-12-技术部.xls','2022-12-推广部.xls','2022-12-客服部.xls','2022-12-行政部.xls','2022-12-财务部.xls']这里指定模板文件名和时间对象,然后批量生成要处理的部门财务文件.python自动工资结算每个财务文件完全一样,就是数据不一样,所以接下来,做一个函数,操作是接收文件名,计算文件中所有人员的工资,写入该文件然后保存。代码如下:defprocess_xls_return_data(xls_name):wb=xlrd.open_workbook(xls_name)wb_sheet=wb.sheet_by_index(0)xwb=copy(wb)xwb_sheet=xwb.get_sheet('sheet1')rows=wb_sheet.nrowsfor范围内的行(1,行):bm=wb_sheet.cell(row,0).valuexm=wb_sheet.cell(row,1).valuegh=wb_sheet.cell(row,2).valuegz=wb_sheet.cell(row,3).valuecdcs=wb_sheet.cell(row,4).valuejj=wb_sheet.cell(row,5).valuesfgz=gz-(cdcs*20)+jj#实际工资=工资-(number迟到*20)+bonusprint(bm,xm,gh,gz,cdcs,??jj,sfgz)xwb_sheet.write(row,6,sfgz)xwb.save(xls_name)forclsinneed_process_xls:process_xls_return_data(cls)介绍功能代码:打开文件,打开sheet,复制文件,读取文件中数据的总行数;从第二行[索引1]开始,读出部门、姓名、工号、薪水、迟到时间、奖金;然后计算应发工资,公式:应薪=工资-(迟到人数*20)+奖金;将应该薪水写到当前行的第7个位置[index6];最后保存,保存的文件名还是源文件名;完成对单个文件的操作;最下面的for循环是循环读取所有要操作的财务文件,一个一个进入函数进行操作,计算工资,保存。python自动工资结算+报表统计工资自动结算已经处理完毕,下面是各部门财务报表的统计。报表中需要写五项:部门、总人数、迟到人数、领取奖金人数、待发工资总额,以及“xxxx-xx-员工数据概览”的数据每个部门”部门的总人数,都是从单一部门的财务单据中得到的,比如迟到人数,领奖金人数,用来判断是否迟到,是否有奖金,并用一个参数记录它们。针对这个需求,可以在原函数之上做一个统计操作,在函数的最后,将这5个数据做成一个列表返回。最后一个是统计报表的表头字段,包含年份和月份。这个可以直接使用time对象生成,但是字体大小和居中效果需要额外定义style样式,所以这部分代码比较尴尬。看看就明白了。如下代码:defprocess_xls_return_data(xls_name):staff_number=0#总人数字段cd_number=0#迟到人数字段jj_number=0#奖金人数字段total_pay=0#工资总额字段wb=xlrd.open_workbook(xls_name,formatting_info=True)wb_sheet=wb.sheet_by_index(0)xwb=copy(wb)xwb_sheet=xwb.get_sheet('sheet1')rows=wb_sheet.nrowsforrowinrange(1,rows):staff_number=staff_number+1#每个数据都是一个员工,直接+1bm=wb_sheet.cell(row,0).value#部门名称xm=wb_sheet.cell(row,1).valuegh=wb_sheet.cell(row,2).valuegz=wb_sheet.cell(row,3).valuecdcs=wb_sheet.cell(row,4).valueifcdcs>0:#如果迟到人数大于0,则为有人迟到,以及迟到人数+1cd_number=cd_number+1jj=wb_sheet.cell(row,5).valueifjj>0:#如果bonus大于0,则为中奖者,而奖金数+1jj_number=jj_number+1sfgz=gz-(cdcs*20)+jj#实际工资=工资-(迟到时间*20)+bonustotal_pay=total_pay+sfgz#将所有实际支付工资相加,就是实际工资总额print(bm,xm,gh,gz,cdcs,??jj,sfgz)xwb_sheet.write(row,6,sfgz)xwb.save(xls_name)print([bm,staff_number,cd_number,jj_number,total_pay])return[bm,staff_number,cd_number,jj_number,total_pay]#最后列出部门总人数,迟到总人数,奖金总人数,实际工资总额,returnall_info=[]forclsinneed_process_xls:one_partment=process_xls_return_data(cls)all_info.append(one_partment)#把函数的返回值放在列表中,然后得到所有部门的统计信息wb=xlrd.open_workbook(template_name,formatting_info=True)wb_sheet=wb.sheet_by_index(0)xwb=copy(wb)xwb_sheet=xwb.get_sheet('Sheet1')current_row=wb_sheet.nrowsyear_month=datetime.datetime.now().strftime("%Y-%m")title="{}-各部门员工数据概览"defcreate_style():#定义字体格式,返回字体大小为24,Arial风格垂直居中和水平居中style=xlwt.XFStyle()fnt=xlwt.Font()#创建一种文本格式,包括字体、字体大小和颜色样式特征fnt.name=u'宋体'fnt.height=20*24alignment=xlwt.Alignment()alignment.horz=0x02#0x01(左对齐),0x02(水平对齐)正方形顶部居中对齐),0x03(右对齐)alignment.vert=0x01#0x00(顶部对齐),0x01(垂直居中对齐),0x02(底部对齐)style.font=fntstyle.alignment=alignmentreturnstylexwb_sheet.write(0,0,title.format(year_month),create_style())#写头部标题,内容为“xxxx-xx-各部门员工资料概览”,样式为宋体字号24纵横居中forinfoinall_info:#循环所有部门信息并全部写入文件xwb_sheet.write(current_row,0,info[0])xwb_sheet.write(current_row,1,info[1])xwb_sheet.write(current_row,2、信息[2])xwb_sheet.write(current_row,3,info[3])xwb_sheet.write(current_row,4,info[4])current_row=current_row+1xwb.save(title.format(year_month)+'.xls')#最后保存,文件名为xxxx-xx-各部门员工数据概览.xls这段代码是在前面功能代码的基础上,附加部门信息统计,并根据模板文件生成“xxxx-xx-各部门员工数据概览.xls”上面的统计文件就是本次任务的执行过程。组合代码块1和代码块3是完整的代码块。源代码中有文中所有的代码文件,包括“批量生成财务报表.ipynb”的代码文件,可以自动生成任意数量的部门和员工的财务文件。欢迎关注我公众号:爱悦创,还有越来越多的精彩等着你去发现!详情公众号:爱悦创【二维码】:::资讯爱悦创·编程一对一爱悦创·推出辅导班,包括《Python语言辅导班、C++辅导班、java辅导班、算法/数据结构》辅导班、少儿编程、pygame游戏开发”,都是一对一教学:一对一辅导+一对一问答+作业布置+项目实践等。当然也有线下和在线摄影课程、Photoshop、Premiere一对一教学,QQ、微信在线,随时回复!微信:JiabcdefhC++资料奥赛题解,长期更新!长期招聘一对一中小学信息奥赛培训,莆田、厦门地区线下有机会参观,其他地区线上。微信:Jiabcdefh方法一:QQ方法二:微信:Jiabcdefh:::