在openpyxl中使用read_only读取excel中的300k单元格不够

时间:2016-04-13 18:30:09

标签: excel python-3.x openpyxl

我在这里读了很多关于用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了!提前谢谢!

2 个答案:

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