说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错。

这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本。

1. 下载相关python包

python操作excel表格可以使用以下三个包

xlrd - 读excel文件

xlwt - 写excel文件,这个不能修改已有的excel文件,只能写新的文件

xlutils - 修改excel文件,其实就是通过xlrd拷贝一份记录,再进行修改。保存为老的名字就替换了原文件,保存为新的名字就创建一个新文件

注意事项:

a. python读取excel的日期和时间时

表格内容是2019/5/13,python读到的值是43606.0,该值为从日期减1899/12/30得到的天数

表格内容是9:00:00,python读到的值是0.375,该值为时间过了一天的比例,即9/24

表格内容是2019/5/13 9:00:00,python读到的值是43598.375

日期和时间可以直接相加,因为python读到的都是转化为数字之后的值

b. python读取excel的数字时,如员工编号为181129,最后结果是181129.0,非整数

c. 调用save函数保存新的excel文件时,后缀名必须是.xls

2. 将python文件转为.bat格式

你不可能要求妹子去使用cmd,然后使用python xx.py去执行python文件,必须想个办法搞成傻瓜式的。我们可以通过.bat格式文件实现

新建文本文件,重命名为“A考勤小工具.bat”,输入下面代码,@py.exe表示后面的参数是python可执行文件

@py.exe Akqfx.py

3. 附上相关代码和excel格式文本

原始数据.xls

外出.xls

请假.xls

法定假日.xls

Akqfx.py

#该脚本为修正考勤记录#author: yangbao

importosfrom datetime importdatetimeimportxlrdfrom xlutils.copy importcopy#定义文件是否存在

defget_list_file():

current_list=os.listdir()

must_list= ['原始数据.xls', '外出.xls', '法定假日.xls', '请假.xls']

cj_set= set(must_list) -set(current_list)ifcj_set:for i incj_set:print('{} 不存在,请检查!'.format(i))return0else:return 1

#定义是否存在流程

defget_qjorwc(file_name, person_id, input_time):

book=xlrd.open_workbook(file_name)

book_sheet=book.sheet_by_index(0)

flag=0for i in range(1, book_sheet.nrows):if int(book_sheet.cell_value(i, 1)) ==int(person_id):#文件不同,时间处理不同

if file_name == '请假.xls':

cell_begin= book_sheet.cell_value(i, 4)

cell_end= book_sheet.cell_value(i, 5)else:

cell_begin= book_sheet.cell_value(i, 3) + book_sheet.cell_value(i, 4)

cell_end= book_sheet.cell_value(i, 5) + book_sheet.cell_value(i, 6)#判断原始数据旷工和迟到是否在请假或外出流程里

#给额外5min的宽限时间

if cell_begin-5/1440 <= input_time <= cell_end+5/1440:

flag= 1

break

returnflag#定义是否是法定假日

defget_fdjr(input_time):

book= xlrd.open_workbook('法定假日.xls')

book_sheet=book.sheet_by_index(0)

flag=0for i in range(1, book_sheet.nrows):

dt= datetime(*xlrd.xldate_as_tuple(book_sheet.cell_value(i, 0), 0))if dt.strftime('%Y-%m-%d') ==input_time:

flag= 1

break

returnflagdefmain():

ys_book= xlrd.open_workbook('原始数据.xls')

ys_book_sheet=ys_book.sheet_by_index(0)

new_ys_book=copy(ys_book)

new_ys_book_sheet=new_ys_book.get_sheet(0)

unnormal_list= ['旷工', '迟到']for i inrange(ys_book_sheet.nrows):#查上班时间

if ys_book_sheet.cell_value(i, 5) inunnormal_list:#查是否是法定假日

dt = ys_book_sheet.cell_value(i, 3)[:10]ifget_fdjr(dt):

new_ys_book_sheet.write(i,5, '*')#查是否有流程

if ys_book_sheet.cell_value(i, 4) != '':

cell_on_time= ys_book_sheet.cell_value(i, 3)[:10] + ' ' + ys_book_sheet.cell_value(i, 4)

cell_on_time_format= datetime.strptime(cell_on_time, "%Y-%m-%d %H:%M:%S") \- datetime.strptime('1899-12-30', '%Y-%m-%d')

cell_on_time_number= cell_on_time_format.days + cell_on_time_format.seconds / (24 * 3600)if 12 < cell_on_time_format.seconds / 3600 < 13:

cell_on_time_number= cell_on_time_format.days + 11.5/24

else:

cell_on_time= ys_book_sheet.cell_value(i, 3)[:10]

cell_on_time_format= datetime.strptime(cell_on_time, "%Y-%m-%d") \- datetime.strptime('1899-12-30', '%Y-%m-%d')

cell_on_time_number= cell_on_time_format.days + cell_on_time_format.seconds / (24 * 3600) + 9/24qj_on_flag= get_qjorwc('请假.xls', ys_book_sheet.cell_value(i, 1), cell_on_time_number)

wc_on_flag= get_qjorwc('外出.xls', ys_book_sheet.cell_value(i, 1), cell_on_time_number)if qj_on_flag == 1 or wc_on_flag == 1:

new_ys_book_sheet.write(i,5, '已有流程')

new_ys_book_sheet.write(i,11, '')#查下班时间

if ys_book_sheet.cell_value(i, 7) inunnormal_list:#查是否是法定假日

dt = ys_book_sheet.cell_value(i, 3)[:10]ifget_fdjr(dt):

new_ys_book_sheet.write(i,7, '*')

new_ys_book_sheet.write(i,11, '')#查是否有流程

if ys_book_sheet.cell_value(i, 6) != '':

cell_out_time= ys_book_sheet.cell_value(i, 3)[:10] + ' ' + ys_book_sheet.cell_value(i, 6)

cell_out_time_format= datetime.strptime(cell_out_time, "%Y-%m-%d %H:%M:%S") \- datetime.strptime('1899-12-30', '%Y-%m-%d')

cell_out_time_number= cell_out_time_format.days + cell_out_time_format.seconds / (24 * 3600)if 12 < cell_out_time_format.seconds / 3600 < 13:

cell_out_time_number= cell_out_time_format.days + 13.5/24

else:

cell_out_time= ys_book_sheet.cell_value(i, 3)[:10]

cell_out_time_format= datetime.strptime(cell_out_time, "%Y-%m-%d") \- datetime.strptime('1899-12-30', '%Y-%m-%d')

cell_out_time_number= cell_out_time_format.days + cell_out_time_format.seconds / (24 * 3600) + 18/24qj_out_flag= get_qjorwc('请假.xls', ys_book_sheet.cell_value(i, 1), cell_out_time_number)

wc_out_flag= get_qjorwc('外出.xls', ys_book_sheet.cell_value(i, 1), cell_out_time_number)if qj_out_flag == 1 or wc_out_flag == 1:

new_ys_book_sheet.write(i,7, '已有流程')

new_ys_book_sheet.write(i,11, '')

new_excel_name= datetime.now().strftime('%Y%m%d_%H%M%S')+'校正后.xls'new_ys_book.save(new_excel_name)if __name__ == '__main__':ifget_list_file():print('开始考勤分析...')

main()print('考勤分析结束...')

input('按任意键结束')else:

input('因为缺少相关excel文件,考勤分析失败,退出程序,按任意键结束')

View Code

该文档仅作个人记录用

python做excel表格代码_python - 操作excel表格相关推荐

  1. python做excel表格代码_python操作excel表格

    我们在写测试用例的时候,是创建一个表格.xlsx,然后把各种条件加到这张表格中去,所以,如何对excel表格操作,是相当重要的一环,那么,接下来,这篇博客就直接教会大家如何通过python去处理平时工 ...

  2. python做excel表格代码_Python读写Excel表格

    最近在做一些数据处理和计算的工作,因为数据是以.CSV格式保存的,因此刚开始直接用Excel来处理. 但是做着做着发现重复的劳动,其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书 ...

  3. python excel操作单元格_python 操作excel表格的方法

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  4. python 做excel可视化报告_Python操作Excel制作可视化数据图,实现自动化办公

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT入门 安装 操作一个简单的Excel文档 操作注释及代码: 操作完成后,数 ...

  5. python excel详解_python操作excel详解

    前提: python操作excel需要使用的模块有xlrd.xlwt.xlutils.对excel进行读.写.更新操作.操作excel时需要先导入这些模块,demo如下: excel-读操作知识点: ...

  6. python操纵excel的方法_python操作Excel的几种方式

    Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 首先你的本地要有包文件,安装上面的包文件如下图 1.xlrd主要是用来读取exce ...

  7. python读excel字体颜色_python操作excel之设置字体颜色及格式

    原博文 2020-06-03 13:46 − xlwings如何设置字体.颜色等属性 # coding: utf-8 import xlwings as xw app=xw.App(visible=F ...

  8. python求三个数平均值_Python操作Excel教程-average函数求平均值

    Python实战:找到\u201CB列\u201D的平均值,\u201C列C\u201D,\u201CD\u201D.这个过程有点麻烦.请仔细看以下步骤:\u201D.1. 核心代码2.操作结果3.流 ...

  9. python做一个系统代码_python初学者,用python3实现基本的学生管理系统代码实例...

    这篇文章分享了管理系统,python学生管理系统的使用,这篇文章非常详细地介绍了通过示例代码实现的学生管理系统,该系统对每个人的研究或工作都有一定的参考学习价值. 这个是用python实现的基本的增删 ...

最新文章

  1. 查询liunx上磁盘占用情况
  2. 【scratch】实用作品方案:微信抽奖机,Scratch编程教育作品
  3. @PathVariable注解使用
  4. JavaFX UI控件教程(三)之Label
  5. Facebook 开源 M2M-100,不依赖英语互译百种语言
  6. python 进度条_6种酷炫Python运行进度条
  7. 《人人都是产品经理》系列图书说明 Late2021
  8. 【转】鼠标右键菜单设置大全
  9. 奔图3305_奔图Pantum P3305DN打印机驱动官方版
  10. 数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告)
  11. win7用ip查找网络计算机,win7通过ip地址查找计算机名的两种方法(图文教程)
  12. 1894 完美的牛栏
  13. 气象插值软件anusplin的使用
  14. Blender导入unity——模型绑定骨骼后再导入unity,材质异常,法线翻转
  15. VBA解锁/上锁worksheet和workbook
  16. python名片识别_基于Python的名片识别接口调用代码实例
  17. PyScripter could not load a Python engine解决方案
  18. 块、内联、内联块都有哪些及其特点
  19. StackFrame
  20. 【英语词组】恋恋不忘Day6-1

热门文章

  1. 【经典】诺基亚手机型号、系列全面分析
  2. 2019计算机考证湖南考点
  3. iMindMap 12.2021中文多语言版下载学习激活教程
  4. 【sqoop】job作业
  5. JAVA面向对象小项目之迷你图书管理系统
  6. Windows及Android倍速播放视频软件下载
  7. 密码忘了?不要紧,Python轻松给你找回来
  8. Android在线预览音乐、视频、pdf、word、Excel
  9. EdgeFlow:Achieving Practical Interactive Segmentation with Edge-Guided Flow(2021)
  10. maven android 多模块,Gradle和Android:包含多个Maven构件的pom配置出版物