2017-09-19 2 views
0

큰 Excel 시트에서 누락 된 데이터의 양을 확인하려고합니다. 다음 코드는 완료하는 데 엄청난 시간이 걸립니다. 나는 비슷한 질문을 보았지만이 답을 어떻게 번역 할 지 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다!큰 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

전체 시트 (sooo many)에 남아있는 셀 또는 시트에있는 테이블에 남아있는 셀을 찾으려고하십니까? 적게)? – Aidan

답변

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 %로 전체 시트의 마지막에 당신을 데려 갈 것이다.

희망이

+0

저는 전체 시트를 스팬하는 3 열의 비어 있지 않은 셀, 약 250k 행을 계산하려고합니다. – asheets

+0

데이터에 대해 자세히 설명해 주실 수 있습니까? 모든 셀의 값을 가진 열이 하나 이상 있습니까? 이것으로 나는 또 다른 해결책을 제안 할 수있다. – Aidan

+0

그래, 모든 행에는 적어도 값이 있습니다. 실제로 간격이없는 열이 하나 있습니다. 다른 사람들, 특히 관심이있는 세 사람은 많은 격차가 있습니다. 나는 그 세 칸의 각각에 얼마나 많은 차이가 있는지 알아 내려고하고 있습니다. – asheets

0

귀하의 문제는 반대로 설명서의 조언에도 불구하고, 당신이 세포에 액세스하기 위해 자신의 카운터를 사용하고 있다는 것입니다 도움이됩니다. 읽기 전용 모드에서는 각각 ws.cell()을 사용하면 워크 시트가 워크 시트의 XML 소스를 다시 작성해야합니다. 관심있는 열의 셀을 가져 오려면 ws.iter_rows(min_col=a, max_col=c)을 사용하십시오.

관련 문제