【Python】エクセルのシートを読み込む方法

Pythonでエクセルのシートを読み込み、シートの値を取り出す方法について説明しようと思う。

ステップとしては、以下の通り。

  1. エクセルファイルを読み込む
  2. シート名を指定してシートを取得する
  3. エクセルでは、A1,B2..のようにセルを指定する
  4. まとめて指定する場合には、for文を使う

必要なのは、openpyxlというモジュールだけ。私はanacondaナビゲータでインストールした。

実行環境は、Python3.7、openpyxlは3.0.2だ。

以下のレポジトリに置いてあったexample.xlsxを使う。

https://github.com/oreilly-japan/automatestuff-ja

エクセルファイルを同じディレクトリに設置してコードを書き始める。

import openpyxl

# エクセルファイルの読み込み
wb = openpyxl.load_workbook("example.xlsx")
print(type(wb))

# シート名の表示
print(wb.sheetnames)

# シートの取得
# DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
sheet = wb.get_sheet_by_name("Sheet1")

DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).

シートを指定するところでワーニングがでた。

get_sheet_by_nameが重複している、らしい。

なんだか気持ち悪いので以下のように修正。

sheet = wb["Sheet1"]

これで、シートが取得できた。

次にセル名を指定して値を取り出してみる。

# A1セルの取得と表示
print(sheet["A1"])
print(sheet["A1"].value)

# B2セルの取得と表示
print(sheet["B2"])
print(sheet["B2"].value)

1つずつ取り出せたが、特定の列をまとめて出力する方法を検討してみた。

まず、シートの最大行と列を取得してみる。

# sheetの最大列と行を取得する
row = sheet.max_row
column = sheet.max_column

print(row)
print(column)

row=7行、column=3列と出力された。

これをfor文で繰り返し指定する。

行を1から7まで出力するようにして、列は2列目(もしくは3列目)を指定。

# シートの2列目を全て取得する
# 先頭の行と列は1から始まることに注意する
for i in range(1, row+1, 1):
    print(i, sheet.cell(row=i, column=2).value)

# シートの3列目を全て取得する
# 先頭の行と列は1から始まることに注意する
for i in range(1, row+1, 1):
    print(i, sheet.cell(row=i, column=3).value)

1 Apples
2 Cherries
3 Pears
4 Oranges
5 Apples
6 Bananas
7 Strawberries

1 73
2 85
3 14
4 52
5 152
6 23
7 98

のように出力されるはず。

やったね!

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog