2017-10-04 19 views
0

私のクエリは、解析スクリプトの一部である関数と関係しています。私は、Excelで一致する値に対応する列番号を見つけるためにPython関数を記述しようとしています。 Excelはopenpyxlを使用してオンザフライで作成されており、3列目から1列目に4列の各ヘッダーがマージされています。後続の関数では、一致するヘッダーに対応する列に追加するコンテンツを解析しています。 (追加情報:私が解析しているコンテンツは、爆発+出力です。ヒット、ギャップ、スパン、アイデンティティのサブカラムを含む各列のヒット名を含むサマリースプレッドシートを作成しようとしています。長さ。Openpyxl max_rowとmax_columnが間違って大きな数字を報告する

私は最初にxlrdのために同様の関数を書いていました。しかし、openpyxl用に書き直そうとすると、max_row関数とmax_col関数が実際に存在するよりも多くの行と列を誤って返すことが分かりました。たとえば、このパイロット入力には20行ありますが、82として報告します。 空の行&列を手動で選択して右クリックして削除しました。このフォーラムの別の場所でアドバイスしました。これはエラーを変更しませんでした。

def find_column_number(x): 
    col = 0 
    print "maxrow = ", hrsh.max_row 
    print "maxcol = ", hrsh.max_column 
    for rowz in range(hrsh.max_row): 
     print "now the row is ", rowz 
     if(rowz > 0): 
      pass 
     for colz in range(hrsh.max_column): 
      print "now the column is ", colz 
      name = (hrsh.cell(row=rowz,column=colz).value) 
      if(name == x): 
       col = colz 
    return col 

max_rowとmax_colの問題は、私はここでの提案を適用し、ここでhttps://bitbucket.org/openpyxl/openpyxl/issues/514/cell-max_row-reports-higher-than-actual議論されてきました。しかし、max_rowはまだ間違っています。

for row in reversed(hrsh.rows): 
    values = [cell.value for cell in row] 
    if any(values): 
     print("last row with data is {0}".format(row[0].row)) 
     maxrow = row[0].row 

私はその後https://www.reddit.com/r/learnpython/comments/3prmun/openpyxl_loop_through_and_find_value_of_the/での提案を試みたが、列の値を取得しようとしました。もう一度、スクリプトは空の列を考慮に入れ、実際に存在する列よりも高い列を報告します。

for currentRow in hrsh.rows: 
    for currentCell in currentRow: 
     print(currentCell.value) 

このエラーを解決したり、目的を達成するための別の方法を提案してもらえますか?

答えて

0

リンクされたバグレポートに記載されているとおり、シートの報告されたディメンションと空の行または列が含まれているかどうかの違いがあります。 max_rowmax_columnがあなたが見たいものを報告していない場合は、最初に完全に空であることを見つけるために独自のコードを書く必要があります。最も効率的な方法は、当然のことながら、max_rowから開始し、逆方向に動作するだろうが、次はおそらく十分です:

for max_row, row in enumerate(ws, 1): 
    if all(c.value is None for c in row): 
     break 
+0

私は今、この提案を試みたが、それはまだ同じ大きな膨張した番号に最大行を示しています。このコメントから手がかりを得て、私はhttps://stackoverflow.com/questions/40547394/checking-for-empty-cells-with-openpyxlで提案されたものを試して、Noneと空文字列の両方を探しましたが、私はまだ同じ結果を得ました大きい膨らんだ数字。 – bioinfoSeeker

+0

*大きい数字*は何を意味しますか? 'max_row'はローカル変数になり、ワークシートのディメンションに直接影響しません。 –

関連する問題