python操作xls_python操作excel表格的方法
这篇文章我们来讲一下在网站建设中,python操作excel表格的方法。本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文。
说明:由于公司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格式文本
Akqfx.py
# 该脚本为修正考勤记录
# author: yangbao
import os
from datetime import datetime
import xlrd
from xlutils.copy import copy
# 定义文件是否存在
def get_list_file():
current_list = os.listdir()
must_list = ['原始数据.xls', '外出.xls', '法定假日.xls', '请假.xls']
cj_set = set(must_list) - set(current_list)
if cj_set:
for i in cj_set:
print('{} 不存在,请检查!'.format(i))
return 0
else:
return 1
# 定义是否存在流程
def get_qjorwc(file_name, person_id, input_time):
book = xlrd.open_workbook(file_name)
book_sheet = book.sheet_by_index(0)
flag = 0
for 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
return flag
# 定义是否是法定假日
def get_fdjr(input_time):
book = xlrd.open_workbook('法定假日.xls')
book_sheet = book.sheet_by_index(0)
flag = 0
for 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
return flag
def main():
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 in range(ys_book_sheet.nrows):
# 查上班时间
if ys_book_sheet.cell_value(i, 5) in unnormal_list:
# 查是否是法定假日
dt = ys_book_sheet.cell_value(i, 3)[:10]
if get_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/24
qj_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) in unnormal_list:
# 查是否是法定假日
dt = ys_book_sheet.cell_value(i, 3)[:10]
if get_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/24
qj_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__':
if get_list_file():
print('开始考勤分析...')
main()
print('考勤分析结束...')
input('按任意键结束')
else:
input('因为缺少相关excel文件,考勤分析失败,退出程序,按任意键结束')
该文档仅作个人记录用
以上就是python 操作excel表格的方法的详细内容,更多关于python 操作excel表格的资料请关注本站其它相关文章!
相关阅读
python操作xls_python操作excel表格的方法相关推荐
- python excel操作单元格_python 操作excel表格的方法
说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...
- python表格处理工具_python 操作excel表格的方法
说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...
- java操作excel方法_Java实现操作excel表格的方法
Java开发人员开发的项目需要自动读取数据,其实我们还需要用程序处理Excel数据表,接下来爱站技术频道小编就为大家讲解Java实现操作excel表格的方法吧! 一:查 (查找本地指定位置的excel ...
- python实现表格合并_Python实现合并excel表格的方法分析
本文实例讲述了Python实现合并excel表格的方法.分享给大家供大家参考,具体如下: 需求 将一个文件夹中的excel表格合并成我们想要的形式,主要要pandas中的concat()函数 思路 用 ...
- python使用openpyxl处理excel表格数据
python使用openpyxl处理excel表格数据 前言 一.安装openpyxl包 二.读取excel数据 1. 获取excel表格的页码 2. 获取excel表格某一行的数据 3. 获取exc ...
- Win11的两个实用技巧系列之嵌套虚拟化、无法新建Excel表格解决方法
目录 Win11系统怎么启用嵌套虚拟化?Win11嵌套虚拟化开启方法 解决方法: Win11系统无法新建Excel表格解决方法 解决方法 Win11系统怎么启用嵌套虚拟化?Win11嵌套虚拟化开启方法 ...
- 关于Excel表格导出方法--application/vnd.ms-excel
由于本人所做的项目中需要用到两种将JSP页面table导出到Excel表格的方法(老板也是坑爹),一种是在后台操作数据库来实现,比较简单.由于本人对JSP页面导出方法不了解,所以在此做个笔记,也希望对 ...
- php怎么在线建excel,PHP中创建和编辑Excel表格的方法
PHP中创建和编辑Excel表格的方法 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: PHP中创建和编辑Excel表格的方法.txt ] (友情提示:右键点上行 ...
- python中用pandas读写excel表格,根据关键字查找填表(类似vlookpup)
python中用pandas读写excel表格,根据关键字查找填表(类似vlookpup) excel的vlookup出了N/A值 相关的库 读取和写入excel文件 查找赋值1 遍历表格每行 查找填 ...
最新文章
- pyqt5动态添加按钮
- 为预防软件质缺陷应该做点儿什么
- Spring AOP之异常转换
- 2018南京网络赛 G. Lpl and Energy-saving Lamps (线段树非递归实现)
- 最大似然估计和最大后验概率
- 网站后台admin修改故事
- java 加法 溢出_StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~
- kafka operation
- Gmail邮箱添加域名解析
- EncodingAESKey
- python格式化输出作业_Python格式化输出
- 阿里云成为MariaDB基金会白金会员 全球唯一入选云计算公司
- BZOJ2843 极地旅行社 LCT
- MonoRail学习笔记十七:TransformFilter的使用
- Java中Properties类的操作配置文件
- 启明星系统字体的演变
- 141178万人, pyechart制作第七次人口普查数据动态图
- 串口抓包/截断工具的安装及使用详解
- mysql 连续打卡天数_Sql如何统计连续打卡天数
- 华为 MA5680T [EPON]简单开局
热门文章
- 一篇文章看懂MySQL的多表连接(包含左/右/全外连接)
- 从机器学习到大模型(零基础)
- acr38u PHP调用,ACS ACR38U-N1智能卡读卡器驱动
- java获取指定周的第一天和最后一天(周统计报表)
- android如何切换主题背景图片,安卓怎么更换主题 安卓手机更换壁纸与主题教程...
- 安卓开发:安卓应用上架主流平台汇总
- java set list map_Java中的Set,List,Map
- 图像特征之SURF特征匹配
- 【word 应用篇】word如何插入页码以及word插入图片显示不全的解决方法
- FFB6D复现Bug