我正在尝试确定大型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)
答案 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)
即可获得您感兴趣的列中的单元格。