在excep中使用read_only在openpyxl中读取300k单元不够

我在这里读了很多关于使用openpyxl读取大型excel文件和load_workbook()中的read_only param的问题,并且我已经用源码excex 50×30成功地完成了它,但是当我尝试在工作簿上使用30×1100表,它摊位。 现在,它只是在Excel中读取并将其传输到multidimensional array。

from openpyxl import Workbook from openpyxl import load_workbook def transferCols(refws,mx,refCol,newCol,header): rmax = refws.max_row for r in range(1, rmax+1): if (r == 1): mx[r-1][newCol-1] = header else: mx[r-1][newCol-1] = refws.cell(row = r, column = refCol).value return ref_wb = load_workbook("UESfull.xlsx", read_only= True) ref_ws = ref_wb.active rmax = ref_ws.max_row matrix = [["fill" for col in range(30)] for row in range(rmax)] print("step ", 1) transferCols(ref_ws,matrix,1,1,"URL") ... 

我只把印刷(“步骤”)行跟踪进度,但令人惊讶的是,它在第​​1步停止! 我只是不知道这个结构是不是很差,或者如果300k的cell对于openpyxl来说太多了。 我甚至还没有开始写我的优秀呢! 提前致谢!

我怀疑你有一个unimensioned工作表,所以ws.max_row是未知的。 如果是这种情况,使用ws.calculate_dimensions()会告诉你,那么你应该迭代平行的两张表的行。

而不是试图读取大的excel在openpyxl尝试pandas应该得到更好的结果。 pandas有更好的function来清理你应该做的数据。

下面是以pandas编写和读回的10000行和30列数据的示例:

 import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10000,30)) df.to_excel('test.xlsx') df1 = pd.read_excel('test.xlsx')