PythonによるExcelスプレッドシートの作成
Excelのフォーマットは(言うまでもありませんが)プロプライエタリです。ただし、オープンにしようと最善を尽くしてはいるようです。コンマ区切りのファイルをExcelで開き、Excelのスプレッドシートとして操作することは簡単にできます。また、コンマ区切りのファイルをPythonで作成することもいたって簡単です。PythonとExcelはcsvファイルを共通言語とする、最高に相性の良い組み合わせです。
Pythonの標準ライブラリには、優れたcsv出力クラスが付属しています。次の短い例で、その使い方を紹介します。
import csv
w = csv.writer(open('output.csv','w'))
for i in range(10):
w.writerow(range(10))
この場合は、2行目の記述を以下のようにすれば問題を回避できます。
w = csv.writer(open('output.csv','w'),lineterminator="\n")
output.csvの内容は以下のようになります。
0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4,5,6,7,8,9
このファイルをExcelで開くと、区切り文字をたずねるダイアログが表示されます。コンマを選択すればそれで完了です。
そうは言っても、csvファイルを開く際のこの一手間が、エンドユーザーのお気に召さないこともあります。そのような場合は、Roman Kiseliovが作成した、ExcelのバイナリファイルをPythonで作成するための素晴らしいライブラリを利用しましょう。これはpyExceleratorというライブラリで、Sourceforgeのプロジェクトページから入手可能です。このライブラリはWindowsやExcelを必要としないので、もっと簡単に実行できます。
前回のcsvの例と同じく、10行×10列の表をpyExceleratorで作成してみましょう。
from pyExcelerator import *
wb = Workbook()
ws0 = wb.add_sheet('0')
for x in range(10):
for y in range(10):
# writing to a specific x,y
ws0.write(x,y,"this is cell %s, %s" % (x,y))
wb.save('output.xls')
先ほどとスクリプトは似ていますが、いくつか重要な違いがあります。pyExceleratorではWorkbookオブジェクトを明示的に作成し、そこにWorksheetオブジェクトを追加する必要があります。Worksheetにデータを書き込むときは、書き込み先の位置をx,yで指定します。この方法は柔軟性に優れていますが、書き込む際に表を頭に思い浮かべることが必要になります。
pyExceleratorの方が少し手間がかかりますが、機能という点でははるかに上です。簡単な表データの作成に加え、セルの書式設定や、Excelの式の挿入など、Excelでよく使われる機能はひととおり網羅しています。csv出力クラスでは、簡単な表を作成することしかできません。
