Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python代码使excel文件损坏。如何纠正这一点?_Python_Excel_Pandas_Openpyxl - Fatal编程技术网

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

Python代码使excel文件损坏。如何纠正这一点?,python,excel,pandas,openpyxl,Python,Excel,Pandas,Openpyxl,我正在编写一个代码,用于将单元格从一个大型excel文件(11740行)复制到另一个大型excel文件(78472行)。这两个文件都有31列。当我运行下面的代码时,它会抛出错误,有时是内存错误,有时是权限拒绝错误。在这之后,它会破坏文件,当我手动打开文件时,我得到以下错误消息 '我们发现'File1.xlsx'中的某些内容存在问题。你想要我们吗 尽我们所能去恢复?如果你相信这个消息的来源 请单击“是” 即使单击“是”,我也看不到工作簿中的任何内容 这是密码 import openpyxl imp

我正在编写一个代码,用于将单元格从一个大型excel文件(11740行)复制到另一个大型excel文件(78472行)。这两个文件都有31列。当我运行下面的代码时,它会抛出错误,有时是内存错误,有时是权限拒绝错误。在这之后,它会破坏文件,当我手动打开文件时,我得到以下错误消息

'我们发现'File1.xlsx'中的某些内容存在问题。你想要我们吗 尽我们所能去恢复?如果你相信这个消息的来源 请单击“是”

即使单击“是”,我也看不到工作簿中的任何内容

这是密码

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')

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

片段:

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

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

片段:

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中有一种特殊的
只读
模式,允许在减少内存开销的情况下阅读大型工作簿。有关完整信息,请参阅以下网址的文档

代码中的更改可能只是:

wb2=openpyxl.load_workbook('File2.xlsx', read_only=True)
这对您正在编写的工作簿的内存使用没有帮助,但可能足以避免您看到的内存错误。如果没有,那么从目标文件中读取数据是值得的,在添加新数据之前,首先使用
只写
模式将其写入新工作簿(注意:我没有尝试过,因此不确定它是否会带来任何好处)

如果我从您的代码中正确地了解到您试图将数据从一个工作簿附加到另一个工作簿,那么代码可能也可以简化一些-例如:

from openpyxl import load_workbook
tgt_wb=openpyxl.load_workbook('File1.xlsx')
src_wb=openpyxl.load_workbook('File2.xlsx', read_only=True)
tgt_ws=tgt_wb['Trove GL Report']
src_ws=src_wb['Sheet2']
for row, row_cells in enumerate(src_ws.rows, tgt_ws.max_row + 1):
    for col, cell in enumerate(row_cells, 1):
      tgt_ws.cell(row=row, column=col).value = cell.value
tgt_wb.save('File1.xlsx')

Openpyxl中有一种特殊的
只读
模式,允许在减少内存开销的情况下阅读大型工作簿。有关完整信息,请参阅以下网址的文档

代码中的更改可能只是:

wb2=openpyxl.load_workbook('File2.xlsx', read_only=True)
这对您正在编写的工作簿的内存使用没有帮助,但可能足以避免您看到的内存错误。如果没有,那么从目标文件中读取数据是值得的,在添加新数据之前,首先使用
只写
模式将其写入新工作簿(注意:我没有尝试过,因此不确定它是否会带来任何好处)

如果我从您的代码中正确地了解到您试图将数据从一个工作簿附加到另一个工作簿,那么代码可能也可以简化一些-例如:

from openpyxl import load_workbook
tgt_wb=openpyxl.load_workbook('File1.xlsx')
src_wb=openpyxl.load_workbook('File2.xlsx', read_only=True)
tgt_ws=tgt_wb['Trove GL Report']
src_ws=src_wb['Sheet2']
for row, row_cells in enumerate(src_ws.rows, tgt_ws.max_row + 1):
    for col, cell in enumerate(row_cells, 1):
      tgt_ws.cell(row=row, column=col).value = cell.value
tgt_wb.save('File1.xlsx')