ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 18089790912

[求助] 得力考勤机转换成VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-10-8 15:17 | 显示全部楼层
本帖最后由 sheeboard 于 2018-10-8 15:37 编辑

用python写的,不知道工时如何算。
  1. import openpyxl
  2. import xlsxwriter
  3. import datetime
  4. wb=openpyxl.load_workbook('考勤记录.xlsx')
  5. ws=wb['员工刷卡记录表']
  6. wb1=openpyxl.Workbook()
  7. ws1=wb1.active

  8. length=ws.max_row
  9. width=ws.max_column

  10. refbase=[]
  11. for row in ws.iter_rows(min_row=1,max_col=width,max_row=length):
  12.     for cell in row:
  13.         if isinstance(cell.value,str):
  14.             if cell.value.startswith('工号'):
  15.                 refbase.append(cell.row)

  16. col_lab=[xlsxwriter.utility.xl_col_to_name(x) for x in range(1,width)]

  17. def process(Tlist):
  18.     temp_list=[]
  19.     Tlist=[datetime.datetime.strptime(x,'%H:%M') for x in Tlist if x !='     ']
  20.     for t,next_t in zip(Tlist,Tlist[1:]):
  21.         if next_t-t<datetime.timedelta(minutes=10):
  22.             temp_list.append(next_t)
  23.     Tlist=[el for el in Tlist if el not in temp_list]
  24.     Tlist=[datetime.datetime.strftime(x,'%H:%M') for x in Tlist]
  25.     return Tlist

  26. def get_value(data):
  27.     time_list=[]
  28.     for item in data:
  29.         for cell in item:
  30.             if cell.value is not None:
  31.                time_list.extend(cell.value.split('\n'))
  32.     time_list=process(time_list)
  33.     return time_list

  34. for i,j in zip(refbase,refbase[1:]):
  35.     for col in col_lab:
  36.         name=ws["L"+str(i)].value
  37.         day=ws[col+str(i+1)].value
  38.         d=ws[col+str(i+2):col+str(j-1)]
  39.         result_data=get_value(d)
  40.         row_data=[name,day]
  41.         row_data.extend(result_data)
  42.         ws1.append(row_data)
  43. wb1.save('结果.xlsx')
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-10 12:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sheeboard 发表于 2018-10-8 15:17
用python写的,不知道工时如何算。

十分感谢,工时我拉公式就好了

TA的精华主题

TA的得分主题

发表于 2018-11-29 21:13 | 显示全部楼层
zmj9151 发表于 2018-10-7 20:13
请测试是否满足需要,多余的时间未做删除

大神,VBA密码多少?想学习一下,谢谢

TA的精华主题

TA的得分主题

发表于 2018-11-29 21:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
眀ζㄤ忝 发表于 2018-11-29 21:13
大神,VBA密码多少?想学习一下,谢谢

没有密码了

7月份员工刷卡记录表.rar

102.92 KB, 下载次数: 168

TA的精华主题

TA的得分主题

发表于 2019-9-12 11:19 | 显示全部楼层
zmj9151 发表于 2018-10-7 20:13
请测试是否满足需要,多余的时间未做删除

大神,问下,如果有三五百人的考勤数据能用这个吗,另外如果想把工号也体现出来应该怎么增加呀,感谢,18068062797我电话和微信,chenyanwei83@163.com是我的邮箱,期待您的回复,不胜感谢!

TA的精华主题

TA的得分主题

发表于 2019-9-12 11:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-12 11:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
18089790912 发表于 2018-10-7 21:46
也只能这样了,十分感谢

学习了,感谢大神啊

TA的精华主题

TA的得分主题

发表于 2019-9-12 16:03 | 显示全部楼层
编程太高级,菜鸟不会,但工作还是要做的,加个用公式重新组织的过渡表,然后复制到其他工作表中(选择性粘贴去掉公式),通过筛选去掉次序为0的行,基本上就和你要求的工作表差不多了(行列差别)。
以后只要将刷卡记录覆盖,过渡表自动更新。工作只是复制、筛选2步。

员工刷卡记录表.rar (126.95 KB, 下载次数: 45)

TA的精华主题

TA的得分主题

发表于 2019-9-12 16:59 | 显示全部楼层
实际上不会编程也很容易处理,用一个过渡表将刷卡记录表重新组织一下,建好过渡表后,不管人数多少,只要通过拖拉即可。然后把过渡表的内容复制到新表中处理,估计学过公式的小鸟都可以自己完成。

员工刷卡记录表.rar (126.95 KB, 下载次数: 70)

TA的精华主题

TA的得分主题

发表于 2019-12-4 14:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好用,VBA很好用,谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 04:40 , Processed in 0.030810 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表