2017-09-19 6 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

シート全体ではなく、シート上のテーブルに対してcalcを実行しようとしている場合は、1つの調整を行うだけで高速化できます。

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

私は、シート全体、約250k行にまたがる3つの関心のある列の空でないセルを数えようとしています。 – asheets

+0

あなたはあなたのデータをさらに詳しく調べることができますか?ギャップがありますか?すべてのセルに値を持つ列が1つ以上あるかどうかこれで私は別の解決法を提案することができます。 – Aidan

+0

ええ、すべての行は少なくとも値を持ちます。実際には、ギャップのない列が1つあります。他のもの、特に私が関心を持っている3つのものは、多くのギャップを持っています。これらの3つの列のそれぞれにいくつのギャップがあるか把握しようとしています。 – asheets

0

あなたの問題は逆にマニュアルのアドバイスにもかかわらず、あなたがセルにアクセスするために、独自のカウンタを使用している、ということであるのに役立ちます。読み取り専用モードでは、それぞれws.cell()を使用すると、ワークシートにワークシートのXMLソースを再解析させます。 ws.iter_rows(min_col=a, max_col=c)を使用して、興味のある列のセルを取得してください。

関連する問題