今回は、Excelファイルの読み込みをやってみます。
以前、データをExcelに書き込む方法を試しました。
書き込んだデータを読み込み、プログラムで編集することが出来れば、利用方法が広がりますね。
※PythonでExcelに書き込み(Pythonの実用的な使い方)
必要なライブラリ
OpenPyXLを使います。(importは、すべて小文字でopenpyxlと指定します。)
Excelファイルを読み込み
まずは以下のようなデータを読み込んでみます。
2つのタブがあり、10行2列のシートがあります。
以下のソースは、開いたブックの全てのセルを順番に参照し、すべてのセルの値を表示するものです。
いろいろなEXCELを入力しても、セルの値を全て表示できると思います。
セルの値を表示する方法はいろいろあるのですが、セルごとに値にアクセスする方法の方が、いろいろと応用ができると思います。
# -*- coding: utf-8 -*-
import openpyxl
# ブックを読み込む
wb = openpyxl.load_workbook('loadtest.xlsx')
# シート名を取り出す
sheet_names = wb.get_sheet_names()
# シート数確認
print('シート数:',len(sheet_names))
# シート名表示
print('シート名:',sheet_names)
# シートでループする
for i in range(0,len(sheet_names)):
# シートのオブジェクトを取り出す
ws = wb.get_sheet_by_name(wb.get_sheet_names()[i])
# シート名表示
print('----------')
print(sheet_names[i])
# rowでループする
for row in range(1,st.max_row+1):
# columnでループする
for column in range(1,ws.max_column+1):
# 改行せずにセルの値を表示(columnの数値をget_column_letterで文字に変換)
print(ws[openpyxl.utils.get_column_letter(column) + str(row)].value, end='')
# 最後の表示でなければ、カンマを表示する
if(column<ws.max_column):
print(',',end='')
# カラムごとの改行を行う
print('')
実行結果は、以下の通りです。
シート数を表示、シート名を全て表示、シートごとの全てのセルにアクセスして、行ごとにカンマ区切りで表示しています。
シート数: 2
シート名: ['1月', '2月']
----------
1月
時間,売り上げ
09:00:00,100
10:00:00,200
11:00:00,300
12:00:00,400
13:00:00,500
14:00:00,600
15:00:00,700
16:00:00,800
17:00:00,900
----------
2月
時間,売り上げ
09:00:00,1000
10:00:00,1100
11:00:00,1200
12:00:00,1300
13:00:00,1400
14:00:00,1500
15:00:00,1600
16:00:00,1700
17:00:00,1800
セルごとにアクセスするためには、ws['A1'].valueのように指定します。
気を付けないといけないのは、行(row)は数字で表現できますが、列(column)は、A,B,Cのように指定する必要があることです。
'A'という文字コードに加算する方法では、AA,ABのように2桁になると対応できません。
そのため、openpyxl.utils.get_column_letter(column)を使って、インデックスを、列の文字列に変換しています。
上記のコードは、そのままコピペしても動作すると思いますので、活用してみてください。
openpyxlは、セルの色を変えたり、グラフ表示までできますので、またご紹介します。