如何深度复制openpyxl中通过load_workbook加载的Workbook对象?
如何深度复制openpyxl加载的Workbook对象?
直接执行wb2 = wb1只是让两个变量指向同一个Workbook对象,修改wb2会直接改动wb1的内容,要实现真正的深度复制,可以通过以下方式完成:
方法:创建新工作簿并复制所有内容(含VBA)
针对你加载的带VBA的xlsm文件,可通过以下代码实现完整的深度复制:
# Cell 3 实现深度复制 import openpyxl from copy import deepcopy # 创建新的空工作簿 wb2 = openpyxl.Workbook() # 删除默认生成的空白工作表 wb2.remove(wb2.active) # 逐个复制原工作簿的所有工作表 for ws in wb1.worksheets: copied_ws = wb2.copy_worksheet(ws) # 若有特殊工作表属性需要保留,可在此额外处理 # 保留原文件的VBA代码(仅当原工作簿开启keep_vba=True时有效) if wb1.vba_archive: wb2.vba_archive = deepcopy(wb1.vba_archive)
使用说明
- 在Jupyter Notebook中,只需加载一次wb1(Cell2),后续每次需要新的副本时,重新运行Cell3即可生成独立的wb2对象。
- 修改wb2的内容(比如删除工作表)不会对wb1产生任何影响,wb1始终保持原始加载状态。
注意事项
- 复制大型工作簿仍需一定时间,但远快于重新从文件加载。
- 若工作表包含复杂公式、图表或宏,复制后建议验证功能是否正常,避免出现内容丢失或异常。
内容的提问来源于stack exchange,提问作者Brian Gonzalez
相关产品推荐
相关产品推荐

