因为xls和xlsx两种格式,xlsx是被加密了传统的方式读取修改不了
下面是xls格式读取修改
# -*- coding: utf-8 -*-## -------------------------------------------------------------------------------# Name: test_excel# Description:# Author: GLK# Date: /7/7# -------------------------------------------------------------------------------import xlrdimport osimport datetimefrom xlutils.filter import process, XLRDReader, XLWTWriter#修改表内容def update_sheet(sheet,sheet_copy,style_list):if sheet.name != '模板':# 得到这个表单自己写的内容的个数(因为每个人表格行数个数都不同,所以没法定位自己写了几个)# rows = sheet.nrows - 11# 得到一个自己写的列表print(f"表单名:{sheet.name}", end=" ")print(f"行数:{sheet.nrows}", end=" ")print(f"列数:{sheet.ncols}", end=" ")# print(f"自己写的内容个数:{rows}", end=" ")# 得到一个单元格的索引位置的格式style = style_list[sheet.cell_xf_index(4, 8)]print("工时内容分别为:",end="")#根据观察最多是写了5个工时内容for i in range(0,5):# 得到这一单元格的内容value = sheet.cell_value(4 + i, 8)if value != "":print(value,end=",")# 按照上面的格式修改单元格sheet_copy.write(4 + i, 6, value, style)print(" 工时日志修改成功!")#通过地址定位到表def select_sheet(addr,date):try:rb = xlrd.open_workbook(addr, formatting_info=True)# 参考xlutils.copy库内的用法 参考xlutils.filter内的参数定义style_list(相当于拆分copy方法)w = XLWTWriter()process(XLRDReader(rb, addr), w)wb = w.output[0][1]style_list = w.style_listtry:# 原本的表 (通过名字查找)sheet = rb.sheet_by_name(date)# 复制出来的表 (通过名字查找)sheet_copy = wb.get_sheet(date)except:print("表名不存在,可能是周六日")#修改表update_sheet(sheet,sheet_copy,style_list)wb.save(addr)except:print("非xls格式的文件")#读取目录下所有的文件名放到result中def get_all_word(cwd):work_time = []get_dir = os.listdir(cwd)for i in get_dir:sub_dir = os.path.join(cwd,i)if os.path.isdir(sub_dir):get_all_word(sub_dir)else:work_time.append(i)return work_time#得到当前时间起一周前的时间表名def get_date_week():#得到今天的时间today = datetime.date.today()#将当前日期一周的时间放到list中week_time = [str(today - datetime.timedelta(days =7 - w)) for w in range(1, 8)]#因为格式问题 需要替换掉 "-"day_time = []for day in week_time:replace = day.replace("-", "")day_time.append(replace)print("当前一周的表单名为:",day_time)return day_timeif __name__ == '__main__':print("======请将所有.xls格式的工时日志文件放到'D:\工时日志'下=======")print()# 1、存放全部excel的目录地址addr = r'D:\\工时日志\\'#2、得到addr目录下所有的文件work_time = get_all_word(addr)print('"D:\工时日志"目录下的文件有:',work_time)#3、得到当前一周的表名week_time = get_date_week()print()#4、遍历每个表for date in week_time:for work_t in work_time:# 拼接addr_work = addr + work_tprint("正在修改的文件为:",work_t,end=" ")#传入地址和要修改的表名select_sheet(addr_work, date)print("#############################")print("全部修改完成!")
xlsx
# -*- coding: utf-8 -*-##-------------------------------------------------------------------------------# Name: test_excel# Description: # Author: GLK# Date: /7/6#-------------------------------------------------------------------------------import openpyxlimport os#读取并修改excel工时def update(wb,time):try:sheet = wb[time]if sheet.title != '模板':#得到这个表单自己写的内容的个数(总长度减去固定的表格长度就是自己添加的个数)rows = sheet.max_row - 11#得到一个自己写的列表print(f"名:{sheet.title}",end=" ")print(f"行:{sheet.max_row}",end=" ")print(f"列:{sheet.max_column}",end=" ")for i in range(0,5): #通过遍历个数得到索引到每个位置进行读取和修改xl_cell = sheet.cell(row=5+i, column=9).valuesheet.cell(row=5+i, column=7,value=xl_cell)print(f"工时内容:{xl_cell}",end=",")print()except:print("表不存在")#加载excel文件并修改设置时间def excel_work(addr_work,date):# 加载 excel 文件print(addr_work)try:wb = openpyxl.load_workbook(addr_work)update(wb,date)wb.save(addr_work)except:print("不是.xlsx格式")#读取目录下所有的文件名放到work_time中def get_all_word(cwd):work_time = []get_dir = os.listdir(cwd)for i in get_dir:sub_dir = os.path.join(cwd,i)if os.path.isdir(sub_dir):get_all_word(sub_dir)else:work_time.append(i)return work_timeif __name__ == '__main__':#存放全部excel的目录地址addr = r'D:\\工时日志\\'#将当前目录下的文件名放到list中work_time = get_all_word(addr)print(work_time)date = input("请输入需要修改的日期:")for work_t in work_time:#拼接addr_work = addr + work_texcel_work(addr_work,date)# active = wb.active# print(active)## # 得到sheet对象# sheet = wb['0701']## sheet['A1'] = '修改'# sheet['C%d'%(5)] = 'aaaaaaaaaaa'## ## 指定不同的文件名,可以另存为别的文件# wb.save(r'D:\工时日志\工作簿1.xlsx')