PythonでExcelからデータを読み込む

Excelでの単純作業を効率化するために普通の人はVBAを使うんでしょうけども、残念ながら私はVB系がからっきしでマクロなんか書いたことがありません。そんな私でもJavascriptにはお世話になっていたので、WindowsJScriptで「new ActiveXObject("Excel.Application")」してごにょごにょしてもいいんですけども、やっぱりそこはメインのPythonでなんとかしたいのが人情ってもの。

そこでGoogleを使ってPythonExcelというキーワードでpyExceleratorというものを発見。しかし結論から言うと複数のセルが結合されていたり、書式バリバリの業務Excelファイルを開こうとすると例外が発生してうまくいかず。ただ単にExcelファイルからデータを抜き取りたいだけなのに。。。

ということでWorking with Excel Files in Pythonチュートリアルに従って、xlrdというパッケージを使ってみます。このxlrdはExcelファイルの読み込み関連のパッケージで、書き込みはxlwt、複写などその他はxlutilsパッケージに機能が分割されています。

まずはインストール

使用する環境はMac OS X Leopard PowerPC G4です。

>>> sys.version
'2.5.1 (r251:54863, Jun 17 2009, 20:37:34) \n[GCC 4.0.1 (Apple Inc. build 5465)]'

easy_installやpipでインストールします。

macmini:~ administrator$ sudo easy_install xlrd
Password:
Searching for xlrd
Reading http://pypi.python.org/simple/xlrd/
Reading http://www.lexicon.net/sjmachin/xlrd.htm
Best match: xlrd 0.7.1
Downloading http://pypi.python.org/packages/source/x/xlrd/xlrd-0.7.1.zip#md5=851bd20873224d97cfb5ccca2d22b81c
Processing xlrd-0.7.1.zip
Running xlrd-0.7.1/setup.py -q bdist_egg --dist-dir /var/folders/ea/eaDvFd-1Hp0oOJrrWgfa-U+++TI/-Tmp-/easy_install-kaKn51/xlrd-0.7.1/egg-dist-tmp-ksHW8-
zip_safe flag not set; analyzing archive contents...
Adding xlrd 0.7.1 to easy-install.pth file
Installing runxlrd.py script to /usr/local/bin

Using /Library/Python/2.5/site-packages/xlrd-0.7.1-py2.5.egg
Processing dependencies for xlrd
Finished processing dependencies for xlrd

早速読み込んでみる

ワークブックをオープンするときにWARNINGが表示されますが、特に支障はなかったです。

>>> import xlrd
>>> wb=xlrd.open_workbook("test.xls")
WARNING *** XF[191] unknown (raw) format key (31, 0x001f)
>>> sheet_1st=wb.sheet_by_index(0)
>>> values=[]
>>> for row in range(sheet_1st.nrows):
...   values.append([sheet_1st.cell(row,col).value for col in range(sheet_1st.ncols)])
... 
>>> import pprint
>>> pprint.pprint(values)

使ってみた感想

Excelをインストールしなくても動作しますし、Windows以外のOSでも普通に動く点がグッド。xlwt使えばExcelファイルの作成もでき、xlutilsで既存ファイルを複写してデータの編集もできます。まぁ複写の際にスタイルが崩れるところはご愛嬌。

かなりいい感じのパッケージに出会いました。