用Python读取考勤机卡式报表并处理成常规的行式报表格式

article/2025/6/28 22:54:04

1. 场景:

在做公司的临时工考勤工资表时,考勤机导出的excel为卡式报表,看很直观,但处理起来麻烦。所以做了一个odoo模块用于将卡式报表处理成更常规的适合财务统计的普通报表。语言Python,用到的模块为xlrd和xlwt。

2.先看效果

在这里插入图片描述
如图,左为卡式报表,右为用python处理后生成的常规财务报表。

3.使用的工具 xlrd,xlwt

xlrd为Python常用的读取excel表格的模块,xlwt为常用的写excel表格的模块,都具体较多的对excel格式,样式,行列数处理的函数。

关于xlrd和xlwt常用的方法介绍,可以看以下两篇博客:
1. https://www.jianshu.com/p/93a1a9a8749b
2. https://blog.csdn.net/zc666ying/article/details/105617072

4.xlrd读取卡式报表主要代码

        excel = xlrd.open_workbook(file_contents=base64.decodestring(self.excel))sheet_name_list = excel.sheet_names()sheet_obj = excel.sheet_by_name(sheet_name_list[0])nrows = sheet_obj.nrows # 总行数ncols = sheet_obj.ncols # 总列数# 逐行读取for line_num in range(0,nrows):start_row = -1name = Nonerow_values = sheet_obj.row_values(rowx=line_num) # listfor cell_value in row_values:if u'姓名' in str(cell_value):start_row = line_numif start_row < 0:continue# line_len = sheet_obj.row_len(rowx=start_row) # 行长度# 从卡式报表获取打卡信息cell_value = sheet_obj.cell_value(rowx=start_row, colx=1)for laborer in all_laborers:if laborer in cell_value:name = laborerif name == None:raise UserError('报表中出现临时工信息表中不存在的名字%s'%str(cell_value))check_records = []for l in range(1, 17):date = sheet_obj.cell_value(rowx=start_row+1, colx=l)check = sheet_obj.cell_value(rowx=start_row+2, colx=l)if date:check_records.append([int(date), check.split(' ')])else:check_records.append([date, check.split(' ')])for l in range(1, 17):date = sheet_obj.cell_value(rowx=start_row+3, colx=l)check = sheet_obj.cell_value(rowx=start_row+4, colx=l)if date:check_records.append([int(date), check.split(' ')])else:check_records.append([date, check.split(' ')])final_data[name] = check_records

5.xlwt写成常规行式报表主要代码

        """ step 4: 根据信息维护数据,做工资表excel """# 先画基本框架book = xlwt.Workbook()style = xlwt.XFStyle() # 创建一个样式对象font = xlwt.Font() # 为样式初始化字体font.bold = True # 粗体font.height = 20*8al = xlwt.Alignment()al.horz = 0x02 # 设置水平居中al.vert = 0x01 # 设置垂直居中style.alignment = alstyle.font = fontsheet = book.add_sheet('邻寻')headers = ['序号','姓名','联系电话','日期','上班','下班','上班','下班','工时','计薪方式','时薪','金额','金额小计','领款登记','复核']line_cr = 0 # 初始化行标# 1. 生成第一行标题,并写入列名sheet.write_merge(0, 0, 0, len(headers)-1, f'{self.month}月深圳仓邻寻临时工工时工资表', style)line_cr += 1for p in range(0,len(headers)):sheet.write(1, p, headers[p], style)line_cr += 1# 2. 生成数据num = 0for name,monthly_data in new_final_data.items():num += 1length = len(monthly_data)phone = ''hourly_wages,work_hours,wages_subtotal = 0,0,0# phone,hourly_wages,work_hours = '',0,0for d in casual_laborer:if name in d:phone,hourly_wages = d[1],d[3]sheet.write_merge(line_cr, line_cr+length-1, 0, 0, num, style)sheet.write_merge(line_cr, line_cr+length-1, 1, 1, name, style)sheet.write_merge(line_cr, line_cr+length-1, 2, 2, phone, style)sheet.write_merge(line_cr, line_cr+length-1, 13, 13, '', style)sheet.write_merge(line_cr, line_cr+length-1, 12, 12, '', style)# 格式转换和写入每行的数据for i in monthly_data:date = f"{self.year}/{self.month}/{str(i[0])}"sheet.write(line_cr, 3, date, style)if len(i[1]) not in (0,2,4):# sheet.write_merge(line_cr, line_cr+length, 4, 7,'打卡异常,请手动确认', style)sheet.write_merge(line_cr, line_cr, 4, 7,'打卡异常,请手动确认', style)elif len(i[1]) == 0:sheet.write(line_cr, 8, 0, style)sheet.write(line_cr, 14, 0, style)elif len(i[1]) == 2:sheet.write(line_cr, 4, i[1][0], style)sheet.write(line_cr, 5, i[1][1], style)work_hours = self.calc_work_hours(i[1][0],i[1][1])sheet.write(line_cr, 8, work_hours, style)sheet.write(line_cr, 14, work_hours, style)else:sheet.write(line_cr, 4, i[1][0], style)sheet.write(line_cr, 5, i[1][1], style)sheet.write(line_cr, 6, i[1][2], style)sheet.write(line_cr, 7, i[1][3], style)work_hours = self.calc_work_hours(i[1][0],i[1][1],i[1][2],i[1][3])sheet.write(line_cr, 8, work_hours, style)sheet.write(line_cr, 14, work_hours, style)sheet.write(line_cr, 9, '时薪', style)sheet.write(line_cr, 10, hourly_wages, style)sheet.write(line_cr, 11, work_hours*hourly_wages, style)line_cr += 1

6.项目源码(包含odoo框架的一些格式,仅做参考用)

百度网盘:链接: https://pan.baidu.com/s/1mviGg92eUBY5tjwUYudRKw 密码: ekt3


http://chatgpt.dhexx.cn/article/L2lnEndH.shtml

相关文章

基于51单片机的指纹考勤机密码锁系统

目录 第1章 概述 4 1.1 指纹识别技术的发展 4 1.2 指纹识别原理 5 1.3 系统设计目的及意义 6 1.4 工作流程 6 第2章 硬件介绍和设计 8 2.1 单片机及最小系统 8 2.1.1 STC89C52单片机介绍 8 2.1.2 外部晶振的设计 10 2.1.3 复位电路的设计 11 2.2 液晶显示模块 12 2.2.1 12864系…

(考勤记录导出教程)指纹考勤机科密C21

0 需求 实验室的指纹考勤机型号是科密C21&#xff0c;需要连接电脑导出考勤记录 1 安装软件 官网下载链接&#xff1a;科密A1考勤管理系统V1.1.0.728安装包数据库 sqlserver 2014 express with advance service with sp3 官网下载链接&#xff1a;https://download.microsof…

九段系统服务器,人力资源一卡通考勤系统

九段人力资源管理系统是一款非常好用的考勤工资管理软件&#xff0c;适合所有企业使用。它的兼容性很不错&#xff0c;可与市面上大多数考勤机兼容&#xff0c;更与钉钉接通&#xff0c;所有数据都会与钉钉同步&#xff0c;员工可用手机登录钉钉查看。 软件功能 1、自定义所需要…

java连接 ZKTeco/中控 -打卡机/考勤机

连接步骤: 1. jacob-1.19版本; 2. 在resources目录下新建lib文件夹, 将jacob.jar 放入项目ib导入; 3. maven里导入本地jar包; 4.将jacob-1.19-x64.dll 放入64位 jre/bin目录下; 5.将中控考勤机sdk 的dll文件全部放入 c:\windows\system32 目录下; 6.运行cmd 注册zkemkeeper.dll…

汉王考勤管理系统教程

&#x1f447;教程&#x1f447; 人脸识别考勤简介 汉王人脸识别考勤系统是由人脸识别考勤机、考勤管理软件两部分组成。电脑驱动程序就是考勤管理软件。 人脸识别考勤机可独立使用&#xff0c;无需连接电脑&#xff0c;即可完成人脸登记、刷脸考勤、存储记录等功能。 考勤机…

钉钉考勤报表生成工具

钉钉考勤报表生成工具---考勤助手 概述 考勤助手是一款针对钉钉考勤、企业微信考勤报表统计工具软件。用户导入钉钉考勤数据&#xff0c;自动生成企业组织结构图&#xff0c;自动生成员工每月考勤打卡明细表、月度考勤汇总表等。软件具有员工生日提醒、劳动合同续签到期提醒、…

java连接带通讯密码的中控考勤机 iface702

java连接带通讯密码的中控考勤机 iface702 java连接中控考勤机导入jacob.jar 1.19版本jacob-1.19-x86.dllzkemkeeper.dll考勤机连接代码iFace系列脱机通讯开发包开发手册 java连接中控考勤机 jdk1.8 32位 文章资源 https://download.csdn.net/download/weixin_47881155/161…

得力人脸识别考勤机密码设置_人脸指纹混合识别考勤机得力怎么使用

展开全部 具体步骤如下: ①安装好设备并给设备通电。 ②进32313133353236313431303231363533e59b9ee7ad9431333365666233入【设置】一栏就可以进行用户登记,人脸指纹登记、设置密码,分配权限。 ③然后进入进行用户验证,确认登记人脸、指纹、密码是否可用。 ④检查设备时间是…

得力考勤机excel密码_可以修改原始考勤记录数据的是哪种人脸指纹考勤机?

目前很多工厂、企业、机关单位、公司、酒店、餐厅、学校、医院、超市等行业都已经安装使用了指纹考勤机、指纹打卡机、以及人脸识别考勤机。指纹考勤机和人脸识别考勤机的使用,规范了公司考勤管理制度,提升了公司整体形象,体现了“公平”“公正”“平等”,提高了企业的工作…

得力考勤机excel密码_考勤机

一、考勤机盛图-T500 ◀点开我了解更多 人脸+指纹+密码三合一,指纹容量3000枚,人脸容量500张,超长兼容,识别速度快,操作简易 二、S600 指纹容量1000枚,记录容量100000条,采用高精度全反光学采集器,识别速度快,高清TFT彩屏,免安装软件,U盘数据上传下载,操…

Version 28 (intended for Android Pie and below) is the last version of the legacy support library, s

刚开始建项目 会出现 Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward. The IDE can help with this: Refactor &g…

三星s8android pie,三星修改Galaxy S8的Android Pie更新时间表,并添加M2

原标题&#xff1a;三星修改Galaxy S8的Android Pie更新时间表&#xff0c;并添加M2 玩懂手机网1月25日资讯&#xff0c;三星为Android 9.0 Pie的One UI新系统专有用户界面投入了大量的精力&#xff0c;这也同时表示三星将会为该系统带去更多好用和明显区别于别的系统的功能&am…

android 9 pie公司,谷歌Android 9 Pie,真正的安卓派

IT之家8月7日消息 今天谷歌正式宣布了Android 9 Pie正式版系统&#xff0c;此前的Android P终于定名为Android Pie&#xff0c;该更新首先面向谷歌Pixel设备和Essential Phone手机推送&#xff0c;索尼、小米、HMD、OPPO、vivo、一加等厂商将在今年秋季获得安卓9正式版。每一代…

android9 0正式版,安卓9.0系统正式版|Android Pie 9.0 正式版 - 天天游戏吧

谷歌Android P正式版&#xff0c;其实也是Android 9.0系统&#xff0c;代号为Android Pie&#xff0c;Pie意义为“馅饼”&#xff0c;这是Android的第九个大版本。 Android 9 Pie最大的更新亮点无疑就是原生手势操作和刘海屏深度优化&#xff0c;此外还有Adaptive Battery(自适…

android 5.0 pie,Android各版本份额占比出炉:Android Pie仍未知

据最新的数据显示&#xff0c;有19.2%的设备装载Android8.0 Oreo系统&#xff0c;相比起上个月的数据来说有了不错的提升达到4.6个百分点&#xff0c;甚至还要比去年的安卓7.0要高出3.4个百分点。2016发布Android 7.07.1 Nougat系统的安卓以29.3%占走了安卓Pie的大部分份额。 另…

三星s8android pie,三星更改Galaxy S8的Android Pie更新计划,添加Gala

原标题&#xff1a;三星更改Galaxy S8的Android Pie更新计划&#xff0c;添加Gala 毫无疑问&#xff0c;三星在其简化的安卓9.0版用户界面上投入了大量的精力&#xff0c;这自然意味着三星正式推送Android Pie的最新版本的时间明显迟于其他品牌高端手机的类似更新。 不过事情似…

安卓学习专栏——安卓报错Version 28 (intended for Android Pie and below) is the last version of the legacy suppor

步骤 系列文章前言1.报错效果2.修改方法 总结 系列文章 提示&#xff1a;转到安卓学习专栏&#xff0c;观看更多内容&#xff01; 点我直达–>安卓学习专栏 前言 com.android.support:appcompat-v7:24.2.1’飘红 报错Version 28 (intended for Android Pie and below) is …

2021-08-25 Android studio 编译提示Version 28 (intended for Android Pie and below) is the last version of

一、如下提示 Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward. The IDE can help with this: Refactor> Migr…

android 9 pie公司,Android 9.0正式推送 定名Android Pie

【IT168 手机讯】北京时间8月7日早间&#xff0c;谷歌率先面向Pixel系列手机推送了Android P正式版(Essential也第一时间升级)&#xff0c;代号“Pie”&#xff0c;这也是Android的第九代正式更新。 对于Android P的命名在正式发布之前众说纷纭&#xff0c;现在看来&#xff0c…

小米2s Android pie,抢先体验Android Pie 小米MIX 2s已收到推送

原标题&#xff1a;抢先体验Android Pie 小米MIX 2s已收到推送 [ 【IT168 手机讯】就在北京时间8月7日凌晨&#xff0c;谷歌推送了Android 9.0的正式版&#xff0c;并将其命名为“Pie”&#xff0c;首批适配的机型包含Pixel以及Essential Phone两大系列的手机&#xff0c;而在测…