Pythonを使ったExcel操作についていろいろ調べてみました。今回は読み取りに特化した内容でまとめています。具体的にはシートの取得方法、セルの値の取得法を「xlrd」と「openpyxl」の二つのモジュールで実行します。二つのモジュールの使い分けについても触れていきたいと思います。
対象レベル
Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。
詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。
xlrdを使ったExcel操作
モジュールのインストール
「xlrd」はインストールが必要なモジュールなので以下のコマンドでインストールします。
pip install xlrd
シート名の取得
今回のエクセル操作をする際に使うブックは以下となります。
ブック名は「test.xlsx」で「Sheet1」と「 Sheet2 」の2シートを持つブックです。
セルの値は「1~40」までの値が設定されており、「= 20 + 1」「21」のセルだけ数式で設定されています。


それでは、初めにシート名の取得をしていきましょう。
まずは、「xlrd」モジュールが使えるように「xlrd」をimportします。
そして、4行目の「xlrd.open_workbook(“ブック名”)」でブックを開きます。
import xlrdwb = xlrd.open_workbook('test.xlsx')
そのあとは「wb」のプロパティにアクセスすることでExcelから情報を読み取ることが出来ます。
print(wb.sheet_names())
下のサンプルソースでは「 sheet_names() 」にアクセスすることでシート名を取得しています。また、シート名は配列として取得されます。
実際に「 sample_xlrd_1.py 」を実行した結果が以下になります。シート名が取得できていますね。

セルの取得
次はセルの情報を読み取る方法についてです。以下のソースがセルの情報を取得する処理を実装したサンプルソースです。
4行目までは先ほどのサンプルと同じです。5行目から少し違っていて。
ブックのオブジェクトに対して「sheet_by_name(‘シート名’)」でシートの情報が取得できます。
sheet1 = wb.sheet_by_name('Sheet1')
6~8行目では、「Sheet1」のセルの情報を取得しています。
注意点は、「cell()」関数の引数は0から始まります。
そして、式の場合でも計算結果と型が取得できます。
シートのオブジェクト.cell(行, 列)
実行結果は以下のようになります。
エクセルと照らし合わせると、正しく表示されています。
6行目 「 Sheet1 」の行が0(1) 、列が0(A)で「A1」のセル「1」
7行目 「 Sheet1 」 の行が1(2) 、列が0(A)で「A2」のセル「6」
8行目 「 Sheet1 」 の行が0(1) 、列が1(B)で「B1」のセル「2」
10行目 「 Sheet2 」 の行が0(1) 、列が0(A)で「A1」のセル「21」(数式も計算結果が表示される)

openpyxlを使ったExcel操作
モジュールのインストール
「openpyxl」もインストールが必要なので以下のコマンドでインストールします。
pip install openpyxl
シート名の取得
「 openpyxl 」でも、シート名を取得してみましょう。
2行目で「openpyxl」をインポートした後は「load_workbook(‘ブック名’)」でワークブックのオブジェクトを取得します。
import openpyxlwb = openpyxl.load_workbook('test.xlsx')
そして、「 ワークブックのオブジェクト.sheetnames 」で配列としてシート名が取得できます。
スポンサーリンク
print(wb.sheetnames)
「xlrd」と同様に配列で取得されています。

セルの取得
次はセルの値を取得してみましょう。先ほどの「 xlrd 」と異なる点は、取得したセルの内容が「計算結果」か「数式」かです。
「 openpyxl 」は「数式」としてそのまま取得することが出来ます。
ワークブックのオブジェクトを取得する4行目までは同じなので説明は省きます。
5行目のように「 ワークブックのオブジェクト [‘シート名’]」でシートの情報が取得できます。
sheet2 = wb['Sheet2']
「 openpyxl 」 でセルの情報を読み取る方法は2種類あり、セル名を指定する方法または行列を指定する方法のいずれかでセルの値が取得できます。
行と列を指定する場合は、「xlrd」と違って1から始まるので注意してください。
print(sheet2['A1'].value)print(sheet2.cell(row=1, column=1).value)
実行結果の2行とも「Sheet2」の「A1」の情報を読み取っており、数式として値が取得

まとめ
「xlrd」 は計算結果が取得できる。
「openpyxl」は計算式が取得できる。
セルを取得する際の行列は異なるので注意すること。 「xlrd」 は0から始まる、「openpyxl」は1から始まる 。