プログラミング

PythonでExcelを読み込み(Pythonの実用的な使い方)

2020年11月3日

今回は、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は、セルの色を変えたり、グラフ表示までできますので、またご紹介します。

※PythonでExcelに書き込み(Pythonの実用的な使い方)

-プログラミング
-, ,

© 2020 小さなことをやってみるブログ