いこブログ

非ITエンジニアのサラリーマンが業務を自動化、効率化するためのプログラムや生活を豊かにする情報を紹介します。

【Python】複数セルを行単位、列単位で取得する

複数セルの値を取得する方法の第二弾です。 前回は、最大行、最大列までの値を取得する方法を紹介しました。 salapy.hatenablog.com

複数セルを取得する

今回は範囲を指定し、行単位、列単位で複数セルの値を取得する方法を紹介します。フォーマットに沿って値を入力されたエクセルファイルから値を取り出す際に利用できそうです。前回よりもより実用的なプログラムです。

前準備

openpyxlのインストール

pipからインストールできます。

pip install openpyxl

使用するExcelファイルの準備

適当なExcelファイル(example.xlsx)を準備します。今回は事前に図のようなファイルをカレントフォルダに保存しました。 f:id:icoyuki:20190605120803p:plain

行単位でセルの値を取得する

行単位でセルの値を取得する場合、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のようなもので返り値が無い場合などに返されるようです。