Pythonでエクセルのシートを読み込み、シートの値を取り出す方法について説明しようと思う。
ステップとしては、以下の通り。
- エクセルファイルを読み込む
- シート名を指定してシートを取得する
- エクセルでは、A1,B2..のようにセルを指定する
- まとめて指定する場合には、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
のように出力されるはず。
やったね!