Home » Python » OpenPyXLの使い方 » OpenPyXLのiter_rows()メソッドやiter_cols()メソッドを使ってCellを順番に取得する

OpenPyXLのiter_rows()メソッドやiter_cols()メソッドを使ってCellを順番に取得する

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.11.1(64-bit) + OpenPyXL 3.0.10

検索キーワード「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セルに、下図のようにデータを入力しておいてから、

以下のスクリプトを実行してください。

import openpyxl as xl

bk = xl.load_workbook(r'c:\temp\sample.xlsx')
ws = bk['Sheet1']

for row in ws.iter_rows():
    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 row in ws.iter_rows():
    for cel in row:
        print(cel.value)

の部分を、Worksheet.iter_cols()メソッドを使った

for col in ws.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を順番に取得する

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.