Pythonでエクセル操作:pyExceleratorでExcel読み込み

| コメント(4) | トラックバック(0)
JavaのPOIをJythonから使ってみる方法もいけます。下記にまとめました(2010/7/25)。
Pythonでエクセル操作 その2:Jython + POI

PythonでExcelファイルを読み込むことになったので、pyExceleratorを使ってみました。

■pyExceleratorダウンロード先

■公式ドキュメント
作成中。。といっているが、ソースや例を見るようにとのこと。。。

■雑感
下記参考ページでも書いてありますが、pyExceleratorでは書き込みと読み込みでの作業勝手が違います。
特にExcelファイルの読み込み結果がスパース配列(*)であるため、Excel VBAのようにRangeオブジェクトを利用するようなデータ操作は使えないです。。。(「スパース配列」初めて聞いた。。。)
例えば、アクティブシートのA列から"excel"の文字列を含むセルの位置情報を取得したい場合、vbaだと次のように書けるけれど、これができない。
Debug.Pring Columns("a").Find(What:="excel").Offset(0, 0)
pyExceleratorのparse_xls()関数の戻り値は、セルの位置情報(行と列)をキーとしたディクショナリ型です。
ディクショナリ型なので、値からキーを引くのが面倒。。。なので、関数を作ってみました。
# coding:utf-8
from pyExcelerator import *

def find_key_by_val(search_word, sheet_data):
    def map_find(_x, _y):
        if _y == search_word:
            return _x
    def except_None(_z):
        return _z <> None
    rlist = map(map_find, sheet_data.keys(), sheet_data.values())
    return filter(except_None, rlist)

if __name__ == '__main__':
    print 'start'
    for sheet_name, values in parse_xls(r'C:\Temp\test.xls'):
        key = find_key_by_val(u'検索したい文字列', values)
        
        if len(key) < 1:
            continue
        for row_index, col_index in sorted(values.keys()):
            if col_index == key[0][1]:
                print values[(row_index, col_index)]
    print 'end'
pyExceleratorでのExcelファイルの読み込み操作は、スパース配列の操作に慣れることとイコールなのかも。

■参考ページ

トラックバック(0)

トラックバックURL: http://www.flotsam-fareast.com/mt425/mt-tb.cgi/28

コメント(4)

あちこちタイプミスしてますよ。
「スパーク配列」なのか
「スパース配列」なのか。

アレ、スパークの方に統一しちゃったんですね。
私はSparse配列のことだと思っていたのですが。

このブログ記事について

このページは、flotsamが2010年1月10日 01:53に書いたブログ記事です。

ひとつ前のブログ記事は「SQLiteの開発ツール」です。

次のブログ記事は「CSS nite LP8「Google Analyticsを使ったWebアクセスログ解析とサイトへの反映」:参加しました」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.27-ja