快速计算大型Excel工作表中的非空单元格

时间:2017-09-19 23:24:53

标签: python openpyxl

我正在尝试确定大型Excel工作表中缺少多少数据。以下代码需要花费大量时间才能完成。我见过类似的问题,但我不确定如何将答案转化为这种情况。任何帮助将不胜感激!

import openpyxl

wb = openpyxl.load_workbook('C://Users/Alec/Documents/Vertnet master list.xlsx', read_only = True)
sheet = wb.active

lat = 0
loc = 0
ele = 0

a = openpyxl.utils.cell.column_index_from_string('CF')
b = openpyxl.utils.cell.column_index_from_string('BU')
c = openpyxl.utils.cell.column_index_from_string('BX')

print('Workbook loaded')

for x in range(2, sheet.max_row):
    if sheet.cell(row = x, column = a).value:
        lat += 1
    if sheet.cell(row = x, column = b).value:
        loc += 1
    if sheet.cell(row = x, column = c).value:
        ele += 1
    print((x/sheet.max_row) * 100, '%')
print('Latitude: ', lat/sheet.max_row)
print('Location', loc/sheet.max_row)
print('Elevation', ele/sheet.max_row)

2 个答案:

答案 0 :(得分:0)

如果您只是尝试在工作表上而不是整张工作表上进行计算,则可以进行一次调整以使其更快。

row = 1
Do Until IsEmpty(range("A1").offset(row,1).value)
     if range("B"&row).value: lat += 1 
     if range("C"&row).value: loc += 1 
     if range("D"&row).value: ele += 1 
     row = row + 1
     Loop

这会将你带到你定义的表的末尾而不是整张表的末尾,这是它花费你这么长时间的90%的原因。

希望这有帮助

答案 1 :(得分:0)

您的问题是,尽管文档中提供了相反的建议,但您使用自己的计数器来访问单元格。在只读模式下,每次使用ws.cell()都会强制工作表重新分析工作表的XML源。只需使用ws.iter_rows(min_col=a, max_col=c)即可获得您感兴趣的列中的单元格。

相关问题