検索キーワード「python openpyxl cell 2重ループ」をきっかけにして、カウンター変数を2つ使った2重ループの中で、Worksheet.cell()メソッドを実行することで、セルを表すCellオブジェクトを順番に取得する、OpenPyXLのサンプルをご紹介しました。
他にも2重ループを使ってCellオブジェクトを取得する書き方があります。
OpenPyXLを使う上で知っておきたいのは、Worksheetクラスに用意されているiter_rows()メソッドやiter_cols()メソッドを使ったコードです。
Worksheet.iter_rows()を使ってCellを順番に取得するサンプル
Cドライブtempフォルダーに存在するsample.xlsxブックの「Sheet1」ワークシートのA1:D2セルに、下図のようにデータを入力しておいてから、
以下のスクリプトを実行してください。
bk = xl.load_workbook(r'c:\temp\sample.xlsx')
ws = bk['Sheet1']
for cel in row:
print(cel.value)
Excel上のデータ、
あ い う え
春 夏 秋 冬
が、
あ
い
う
え
春
夏
秋
冬
と出力されます。
サンプルで行っている処理
上記コードの2重ループの外側のfor文
for row in ws.iter_rows():
がこの記事でのポイントです。
Worksheet.iter_rows()メソッドの戻り値はジェネレーターで、その要素をfor文で1つ取得したものは、Cellオブジェクトを要素として含むタプルになっています。
for row in ws.iter_rows():
print(type(row))
print(row)
を実行すると、
<class 'tuple'>
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>)
<class 'tuple'>
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>)
と出力され、1行のデータが1つのタプルになっている様子を確認できます。
この1行のデータを含むタプルから、要素である個々のセルを順番に取得しているのが、
for row in ws.iter_rows():
for cel in row:
の内側のfor文「for cel in row」です。
Worksheet.iter_cols()を使ってCellを順番に取得するサンプル
先ほどのコードの、
for cel in row:
print(cel.value)
の部分を、Worksheet.iter_cols()メソッドを使った
for cel in col:
print(cel.value)
にして実行した場合は、
Excel上のデータ、
あ い う え
春 夏 秋 冬
が、
あ
春
い
夏
う
秋
え
冬
と出力されます。
引数min_col・min_row・max_col・max_rowを指定してループ範囲を指定できる
iter_rows()メソッド・iter_cols()メソッドともに、引数min_col・min_row・max_col・max_rowを指定することで、どの範囲をループ処理するのかを指定できます。
たとえば、
for row in ws.iter_rows(min_col=2):
for cel in row:
print(cel.value)
と指定した場合には、
あ い う え
春 夏 秋 冬
から、
い
う
え
夏
秋
冬
が取得・出力されます。
for row in ws.iter_rows(max_col=3):
for cel in row:
print(cel.value)
と指定した場合には、
あ
い
う
春
夏
秋
が取得・出力されます。
最終更新日時:2023-05-07 16:53
Home » Python » OpenPyXLの使い方 » OpenPyXLのiter_rows()メソッドやiter_cols()メソッドを使ってCellを順番に取得する