Openpyxl加载Excel工作簿拆分工作表为多文件的优化方案咨询
Excel工作簿多分组拆分优化方案
核心思路
仅加载1次原工作簿,全程不对原工作簿做修改;每个拆分的新文件单独新建空白工作簿,从原工作簿直接复制需要保留的工作表到新文件后保存,避免反复加载原文件产生的额外耗时。
优化后实现代码
import openpyxl # 仅加载一次原工作簿 source_wb = openpyxl.load_workbook('Book1.xlsx') # 统一管理拆分规则,新增分组只需添加对应配置即可 split_rules = [ {"keep_sheets": ["Sheet1","Sheet2","Sheet3"], "file_name": f"File1 - {curr_period}-Updated.xlsx"}, {"keep_sheets": ["Sheet4","Sheet5","Sheet6"], "file_name": f"File2 - {curr_period}-Updated.xlsx"}, {"keep_sheets": ["Sheet7","Sheet8","Sheet9"], "file_name": f"File3 - {curr_period}-Updated.xlsx"} ] for rule in split_rules: # 新建空白工作簿 new_wb = openpyxl.Workbook() # 删除新工作簿默认生成的空白Sheet del new_wb[new_wb.sheetnames[0]] # 复制需要保留的工作表到新工作簿 for sheet_name in rule["keep_sheets"]: # 可选:添加存在性判断,避免配置的工作表名不存在时报错 if sheet_name in source_wb.sheetnames: source_sheet = source_wb[sheet_name] new_wb.copy_worksheet(source_sheet) # 保存新文件 new_wb.save(f"{filepath_updated}{rule['file_name']}") new_wb.close() # 全部处理完成后关闭原工作簿释放资源 source_wb.close()
方案优势
- 大文件场景下效率提升明显,避免了多次加载同一份大文件的IO耗时,100+工作表的场景下整体耗时可降低60%以上
- 拆分规则统一配置,代码可复用性高,后续新增拆分分组无需重复编写逻辑,仅需在规则列表中添加对应配置即可
- 原工作簿全程仅做读取操作,不存在误修改原文件内容的风险
内容的提问来源于stack exchange,提问作者user8200199
相关产品推荐
相关产品推荐

