ライブラリ: xlrd

Pythonの「xlrd」というライブラリについてご紹介します。

import xlrd

xlrd は Excel (xls) のデータを Python で読むためのライブラリです。 xlrd は読み込み専用で、書き込み用の xlwt というライブラリも存在します。

xlrd では Book → Sheet → Cell という構造でエクセルデータを抽出します。

まずは Book を開くところから見ていきましょう。

Excel ファイルを開くには関数 open_workbook() を用います。引数は対象ファイルのパスです。

FILE = 'excelbook.xls'
book = xlrd.open_workbook(FILE)

open_workbook() で Excel ファイルを開いたら(= Book オブジェクトを作成したら)、アトリビュートやメソッドを使ってその中身の情報にアクセスすることができます。

# 文字コード
print 'encoding:', book.encoding

# シートの枚数
print 'number of sheets:', book.nsheets

# シートの一覧(名前、データの入った行と列の数)
print 'sheets:'
for s in book.sheets():
    print '%s %sx%s' % (s.name, s.nrows, s.ncols)

シートの中身を取得するには、 Book から Sheet オブジェクトを取得してから cell() メソッドを使います。

# Sheet1という名前のシートを取得
s = book.sheet_by_name('Sheet1')

print s.cell(1, 3)  # 指定した行・列のCellオブジェクトを取得
print s.cell_type(1, 3)  # セルのtypeを取得
print s.cell_value(1, 3)  # セルのvalueを取得

Sheet を取得する方法は 2 とおりあります。

  • 名前で取得する: sheet_by_name()
  • インデックスで取得する: sheet_by_index()

各セルには typevalue という情報が入っています。 type には「文字列」や「数値」といったセルのフォーマット情報が value にはデータの値が入っています。 type には

  • 1: 文字列
  • 2: 数値
  • 3: 日付

といった形であらかじめ番号が割り当てられています。

行番号、列番号が 0 始まりの数字であることに注意が必要です。たとえば、 cell(1, 3) でアクセスできるセルはエクセル上では上から 2 行目、左から 4 列目のセルになります。

セル単位ではなく、行単位、列単位でデータを取得したいときのために row() col() というメソッドも用意されています。

s.row(0)  # 最初の行のセルをリストで取得
s.col(0)  # 最初の列のセルをリストで取得
s.col_values(0)  # 最初の行の値をリストで取得

以上です。

インストール

setuptoolspip が入っていればターミナルで pip install xlrd と打つとインストールできます。

参考