python
复制代码
# 导入xlrd库,用于读取Excel文件
import xlrd
# 从xlutils.filter导入process, XLRDReader, XLWTWriter,用于处理Excel文件的复制和写入
from xlutils.filter import process, XLRDReader, XLWTWriter
# 加个装饰器测试时间
# def timeit(func):
# def wrapper(*args, **kwargs):
# import time
# start_time = time.time()
# result = func(*args, **kwargs)
# end_time = time.time()
# print(f"{func.__name__} took {end_time - start_time:.4f} seconds")
# return result
# return wrapper
# @timeit
def copy2(wb):
"""
复制给定的工作簿,同时保留样式信息。
参数:
wb: 一个xlrd.Book对象,代表要复制的Excel文件。
返回:
一个元组,包含复制后的xlwt工作簿对象和样式列表。
"""
# 初始化一个XLWTWriter对象,用于写入复制的内容
w = XLWTWriter()
# 使用XLRDReader读取源工作簿内容,并通过process函数将其复制到XLWTWriter对象中
process(XLRDReader(wb, 'unknown.xls'), w)
# 返回复制后的Excel内容和样式列表
return w.output[0][1], w.style_list
# 参数formatting_info=True表示保留格式信息,on_demand=True表示按需加载工作表
rb = xlrd.open_workbook('1.xls', formatting_info=True, on_demand=True)
# 调用copy2函数复制工作簿,返回新的工作簿对象和样式信息
wb, s = copy2(rb)
# 获取复制后工作簿的第一个工作表
wbs = wb.get_sheet(0)
# 获取原工作簿的第一个工作表
rbs = rb.get_sheet(0)
# 获取单元格的样式,用于后续写入
styles = s[rbs.cell_xf_index(0, 0)]
# 关闭原工作簿的资源,释放内存
rb.release_resources()
# 在复制后的工作簿的第一个单元格中写入'aa',并应用之前获取的样式
# 保存复制后的工作簿到指定路径
wb.save("2-副本.xls")