このサイトについて

Pythonで生エクセルファイルを読み書きするpyExceleratorを使ってみた

Pythonで生エクセルファイルを読み書きするpyExceleratorを使ってみた

普段自らこういうことはやらないんだけど,やむにやまれず大量(500個ほど)のエクセルファイルをCSVファイルに変換する必要があった。RubyではSpeadsheetというのがあるみたい。PerlではSpreadsheet::WriteExcelとかSpreadsheet::ReadExcelとか使うのかな。

まあ僕はPythonな人ということもあり,Pythonでできないかと思って調べてみたらpyExceleratorというモジュールを発見した。Pure Pythonで書かれたモジュールなのでインストールが簡単。生のエクセルファイルを直接読み書きできるので,プラットフォームを問わず動かすことができる。

やりたいことはエクセル -> CSVファイルへの変換なので,ここで発見したスクリプトをちょっと改造して使った。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, csv
import pyExcelerator

def xls_to_csv( xls_file, csv_file ):
    xls_sheets = pyExcelerator.parse_xls( xls_file )

    #for sheet_id in xls_sheets:
    cell_dict = xls_sheets[0][1]

    # set limitter row_max and column_max
    for which in (0, 1):
        exec ("""%s = max([cell_dict.keys()[key_index][which]"""
              """ for key_index in xrange(len(cell_dict.keys()))] )""") % \
                ["row_max", "column_max"][which]

    # creating csv file.
    create_csv = csv.DictWriter(file(csv_file, "ab"),
                                fieldnames=range(column_max+1) )
    for row in xrange(row_max+1):
        create_csv.writerow(dict(
                enumerate([cell_dict.copy().get((row, column), '')
                            for column in xrange(column_max+1)])))

if __name__ == "__main__":
    xls_to_csv( sys.argv[1], sys.argv[2] )

 超Pythonicだ。exec文は使う必要ない,というかなにこれこわい。

こことか見ると,他にもフォント変えたり画像はりつけたりセルの幅変えたり,いろいろできるみたい。

2010-08-27 04:52