読み取り専用のブックを使用しています。
およびWorksheet.iter_cols()
メソッドは、Worksheet.cell()
を使用して「欠落」セルを動的に作成することによってワークシートの内部構造を変更します。
事実場合、Worksheet
インスタンスは、キーが(row_idx, col_idx)
タプルあるdict
にすべての非空のセルを格納し、値がCell
インスタンスです。セルが空の場合(値もスタイルもない場合)、dict
には格納されません。
ワークブックをread_only=False
でロードすると、ワークシートを反復せずに反復処理できます。 _cells
保護属性にアクセスできます。
あなたは、このようなitre_cols
を実装することができます:細胞は、セルのリストがある
def calculate_indexes(cells):
# Really efficient and low memory consuming (was profiled) algorithm
min_row_idx, min_col_idx = next(iter(cells), (1, 1))
max_row_idx, max_col_idx = min_row_idx, min_col_idx
for row_idx, col_idx in cells:
min_col_idx = min_col_idx if min_col_idx < col_idx else col_idx
min_row_idx = min_row_idx if min_row_idx < row_idx else row_idx
max_col_idx = max_col_idx if col_idx < max_col_idx else col_idx
max_row_idx = max_row_idx if row_idx < max_row_idx else row_idx
return min_col_idx, min_row_idx, max_col_idx, max_row_idx
座標:
ワークシート内のセルのバウンディングボックスを計算するために、この機能を使用することができます:
def iter_cols(ws):
min_col_idx, min_row_idx, max_col_idx, max_row_idx = calculate_indexes(ws._cells.keys())
for col_idx in range(min_col_idx, max_col_idx + 1):
yield [(ws._cells[(row_idx, col_idx)] if (row_idx, col_idx) in ws._cells else None)
for row_idx in range(min_row_idx, max_row_idx + 1)]
for col in iter_cols(ws):
print(col)
'iter_cols()'は読み取り専用モードでは例外として明示的に無効になっています。 –