この構文は、openpyxl を使って Excel シートを行単位で走査するときの典型的な書き方です。
-
sheet.iter_rows(...)は、指定したシート内の全行を「イテレータ」として返します。 -
enumerate(...)を使うことで、row_idxに行番号(0始まり)を格納しつつ、rowとして実際の行データを取り出すことができます。 -
引数の
values_only=Falseを指定すると、-
取り出されるのは**
Cellオブジェクト**のタプルになります。 -
もし
values_only=Trueにすると、セルの実際の値(文字列や数値など)のみが返されることになります。
-
たとえば values_only=False で書いておけば、次のようなアクセスが可能になります。
for row_idx, row in enumerate(sheet.iter_rows(values_only=False)):
# row は Cell オブジェクトのタプル
for cell in row:
# セルの値: cell.value
# セルの座標: cell.coordinate
# セルの背景色、フォントなどの書式情報にもアクセス可能
pass
一方、単純にセルの中身だけを欲しいときは values_only=True とすることが多いです。すると row は「セルの値のタプル」になり、シンプルに
for row_idx, row_values in enumerate(sheet.iter_rows(values_only=True)):
# row_values は (値1, 値2, 値3, ...) のタプル
# 書式情報や座標等は参照できない
pass
のように書けます。
まとめ:
-
enumerate(sheet.iter_rows(values_only=False))-
row_idx: 行のインデックス(0から始まるカウント) -
row: ある行のすべての Cell オブジェクト を格納したタプル
-
-
values_onlyの指定-
False⇒ セルのオブジェクト(Cell)が欲しい場合 -
True⇒ セルの中身の値のみを簡単に取得したい場合
-
用途に応じて切り替えて使ってください。
(文責:ChatGPT o1)