我正在编写一个代码,用于将单元格从一个大的excel文件(11740行)复制到另一个大excel文件(78472行)。两个文件都有31列。当我运行下面的代码时,它会抛出错误,有时是内存错误,有时是权限拒绝错误。之后它会破坏文件,当我手动打开文件时,我得到以下错误消息
'We found a problem with some content in 'File1.xlsx'. Do you want us to try to recover as much as we can? If you trust the source of this workbook,click Yes.'
即使我单击“是”,我在工作簿中也看不到任何内容。在
这是密码
import openpyxl
import os
os.chdir('C:\\PYP')
wb1=openpyxl.load_workbook('File1.xlsx')
wb2=openpyxl.load_workbook('File2.xlsx')
tgt=wb1.get_sheet_by_name('Trove GL Report')
src=wb2.get_sheet_by_name('Sheet2')
lim1=tgt.max_row
lim2=src.max_row
clim=31
lim3=lim1+lim2
lim3
for i in range(1,lim2+1,1):
for j in range(1,clim+1,1):
tgt.cell(row=lim1+i,column=j).value=src.cell(row=i+1,column=j).value
wb1.save('File1.xlsx')
如果文件真的很大,那么应该分块读取,以避免内存错误。在
片段:
Openpyxl中有一种特殊的
read_only
模式,可以在减少内存开销的情况下阅读大型工作簿。完整信息可在http://openpyxl.readthedocs.io/en/default/optimized.html的文档中找到。在您的代码的更改只是:
这对正在编写的工作簿的内存使用没有帮助,但可能足以避免出现内存错误。如果没有,那么值得从目标文件中读取数据,在附加新数据之前,先使用
write-only
模式将其写入新工作簿(注意:我没有尝试过,因此不确定它是否会带来任何好处)。在如果我从您的代码中正确地理解您正在尝试将数据从一个工作簿附加到另一个工作簿,那么代码也可能会稍微简化—例如:
^{pr2}$相关问题 更多 >
编程相关推荐