使用pandas的read_excel读取,耗时巨大,而且不适合作为调试工具,这里使用openpyxl,用它的只读模式,可以 即时 读取任何单元格的内容,先上代码:
import openpyxl
file = big_excel.xlsx
# 必须是只读模式,否则也是很慢
wb = openpyxl.load_workbook(file,read_only=True)
sht = wb[Sheet1]
# 从第2行5列读起,data就是一行的数据。注意,excel的第一行第一列是(1,1),而非(0,0)
for datas in sht.iter_rows(min_row=2,min_col=5):
col_size = len(datas)
for i in range(col_size):
cell_value = datas[i].value
千万千万要注意的,不要使用sht.cell(row,column)定位单元格,否则数据量非常大,非常慢,内存瞬间爆满,程序卡住。可以用以下方式先读取表头和行头
读取数据同时包含表头行头
正确写法
# 读取表头,假设表头是从第2行第2列开始
row_datas = []
for datas in sht.iter_rows(min_row=2,min_col=2,max_row=2):#只读取第二行
for i in range(len(datas)):
value = datas[i].value
row_datas.append(value)
# 读取行头,假设内容从第3行第1列开始
col_datas = []
for datas in sht.iter_rows(min_row=3,min_col=1,max_col=1):
for i in range(len(datas)):
value = datas[i].value
col_datas.append(value)
# 读取数据的同时显示表头和列头数据
for datas in sht.iter_rows(min_row=3,min_col=2):
row_num = datas[0].row
for i in range(len(datas)):
cell_value = datas[i].value
col_header = col_datas[i] # 列头
row_header = row_datas[row_num-3] #行头
# 这个也是正确写法
# col_num = datas[i].column
# col_header = col_datas[col_num-2]
错误写法
看起来比上面代码量少,实际上对于大的文件没法用
for datas in sht.iter_rows(min_row=3,min_col=2):
row_num = datas[0].row
for i in range(len(datas)):
cell_value = datas[i].value
col_num = datas[i].column
# 以下2行代码导致读起来极其慢,而且内存瞬间爆满
row_header = sht.cell(row_num,2)
col_header = sht.cell(3,col_num)