【Python】複数セルを行単位、列単位で取得する
複数セルの値を取得する方法の第二弾です。 前回は、最大行、最大列までの値を取得する方法を紹介しました。 salapy.hatenablog.com
複数セルを取得する
今回は範囲を指定し、行単位、列単位で複数セルの値を取得する方法を紹介します。フォーマットに沿って値を入力されたエクセルファイルから値を取り出す際に利用できそうです。前回よりもより実用的なプログラムです。
前準備
openpyxlのインストール
pipからインストールできます。
pip install openpyxl
使用するExcelファイルの準備
適当なExcelファイル(example.xlsx)を準備します。今回は事前に図のようなファイルをカレントフォルダに保存しました。
行単位でセルの値を取得する
行単位でセルの値を取得する場合、iter_rowsメソッドが便利です。 min_row、min_col、max_row、max_colの値を与えることで、範囲を指定できます。 max_row、max_colに値を与えない場合は、値の入っている最大行、最大列まで取得するようになります。 プログラム例:
import openpyxl # ブック取得 wb = openpyxl.load_workbook("example.xlsx") # シートを取得 sheet = wb["Sheet1"] # 行単位でセルの値を取得する A2~C5まで for rows in sheet.iter_rows(min_row=2, min_col=1, max_row=5, max_col=3): for cell in rows: print(cell.value) print("-------------------------------------") # 値の入っている最大行、最大列まで行単位でセルの値を取得する for rows in sheet.iter_rows(min_row=1, min_col=1): for cell in rows: print(cell.value)
実行結果:
A2 B2 C2 A3 B3 C3 A4 B4 C4 A5 B5 C5 ------------------------------------- A1 B1 C1 A2 B2 C2 A3 B3 C3 A4 B4 C4 A5 B5 C5 A6 B6 C6 A7 B7 C7 A8 B8 C8 A9 B9 C9 A10 B10 C10
列単位でセルの値を取得する
列単位でセルの値を取得する場合、iter_colsメソッドが便利です。 min_row、min_col、max_row、max_colの値を与えることで、範囲を指定できます。 max_row、max_colに値を与えない場合は、値の入っている最大行、最大列まで取得するようになります。
import openpyxl # ブック取得 wb = openpyxl.load_workbook("example.xlsx") # シートを取得 sheet = wb["Sheet1"] #列単位でセルの値を取得する A1~B7まで for cols in sheet.iter_cols(min_row=1, min_col=1, max_row=7, max_col=2): for cell in cols: print(cell.value) print("-------------------------------------") # 値の入っている最大行、最大列まで列単位でセルの値を取得する for cols in sheet.iter_cols(min_row=1, min_col=1): for cell in cols: print(cell.value)
実行結果:
A1 A2 A3 A4 A5 A6 A7 B1 B2 B3 B4 B5 B6 B7 ------------------------------------- A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
取得したセルに値が無かった場合
セルに値が無かった場合は、cell.valueはNoneを返します。Noneはnullのようなもので返り値が無い場合などに返されるようです。