Python代码导致excel文件损坏。如何纠正这一点?

2024-10-02 12:22:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个代码,用于将单元格从一个大的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')

Tags: 文件代码insrc错误xlsxexcelfile1
2条回答

如果文件真的很大,那么应该分块读取,以避免内存错误。在

片段:

import pandas as pd

excel = pd.ExcelFile("File1.xlsx")

for sheet in excel.sheet_names:
  reader = excel.parse(sheet, chunksize=1000):
  for chunk in reader:
      #parse chunk here

Openpyxl中有一种特殊的read_only模式,可以在减少内存开销的情况下阅读大型工作簿。完整信息可在http://openpyxl.readthedocs.io/en/default/optimized.html的文档中找到。在

您的代码的更改只是:

wb2=openpyxl.load_workbook('File2.xlsx', read_only=True)

这对正在编写的工作簿的内存使用没有帮助,但可能足以避免出现内存错误。如果没有,那么值得从目标文件中读取数据,在附加新数据之前,先使用write-only模式将其写入新工作簿(注意:我没有尝试过,因此不确定它是否会带来任何好处)。在

如果我从您的代码中正确地理解您正在尝试将数据从一个工作簿附加到另一个工作簿,那么代码也可能会稍微简化—例如:

^{pr2}$

相关问题 更多 >

    热门问题