因为xls和xlsx两种格式,xlsx是被加密了传统的方式读取修改不了
下面是xls格式读取修改
# -*- coding: utf-8 -*-#
# -------------------------------------------------------------------------------
# Name: test_excel
# Description:
# Author: GLK
# Date: 2021/7/7
# -------------------------------------------------------------------------------
import xlrd
import os
import datetime
from 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_list
try:
# 原本的表 (通过名字查找)
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_time
if __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_t
print("正在修改的文件为:",work_t,end=" ")
#传入地址和要修改的表名
select_sheet(addr_work, date)
print("#############################")
print("全部修改完成!")
xlsx
# -*- coding: utf-8 -*-#
#-------------------------------------------------------------------------------
# Name: test_excel
# Description:
# Author: GLK
# Date: 2021/7/6
#-------------------------------------------------------------------------------
import openpyxl
import 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).value
sheet.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_time
if __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_t
excel_work(addr_work,date)
# active = wb.active
# print(active)
#
# # 得到sheet对象
# sheet = wb['20210701']
#
# sheet['A1'] = '修改'
# sheet['C%d'%(5)] = 'aaaaaaaaaaa'
#
# ## 指定不同的文件名,可以另存为别的文件
# wb.save(r'D:\工时日志\工作簿1.xlsx')