我在这里读了很多关于用openpyxl读取大型excel文件和load_workbook()中的read_only参数的问题,并且我已经成功完成了源excels 50x30,但是当我尝试在工作簿有30x1100张,它会停止。现在,它只是读取excel并将其传输到多维数组。
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细胞对于openpyxl是否过多。我甚至没有开始写我的put excel了!提前谢谢!
答案 0 :(得分:0)
我怀疑你有一个不规范的工作表,所以ws.max_row
是未知的。如果是这种情况,请使用ws.calculate_dimensions()
告诉您,然后您应该并行遍历两个工作表的行。
答案 1 :(得分:-1)
而不是尝试在openpyxl
中尝试阅读大型Excel,尝试pandas
可以获得更好的结果。 pandas有更好的功能来清理你应该做的数据。
以下是在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')