2010年7月アーカイブ

PythonでExcelファイルのデータを扱う方法として、以前Python + pyExceleratorを紹介しました。
(記事はこちら→「Pythonでエクセル操作:pyExceleratorでExcel読み込み」)

pyExceleratorでは、Excelファイルをインプットとして取り込む用途では使えていたのですが、これがINPUT/OUTPUTが同じファイルになると面倒なんです。「上書き保存」がそのままだとできない。。

そこでいろいろ調べてみたら、JavaのPOIなら「上書き保存」がいけるとのこと。
JavaのAPIを使うならPythonのJava実装である、Jythonを使えばいいよね!ということで、試してみました。

「Apache POI - the Java API for Microsoft Documents」
http://poi.apache.org/

「The Jython Project」
http://www.jython.org/

# coding:utf-8

from java.io import *
from org.apache.poi.ss.usermodel import *

def write_data(wsheet_name, wdata):
    excel_file = "data.xlsx"
    try:
        fi = FileInputStream(excel_file)
    except FileNotFoundException:
        print '[ERROR] file not found (1)'
        return

    WB = WorkbookFactory.create(fi)
    sheet = WB.getSheet(wsheet_name)
    if sheet == None:
        sheet = WB.createSheet(wsheet_name)
    row = sheet.getRow(0)
    if row == None:
        row = sheet.createRow(0)
    cell = row.getCell(0)
    if cell == None:
        cell = row.createCell(0)
    cell.setCellValue(wdata)
    
    try:
        fo = FileOutputStream(excel_file)
    except FileNotFoundException:
        print '[ERROR] file not found (2)'
        return 
    WB.write(fo)

if __name__ == '__main__':
    for i in range(3):
        sheet_name = "work_%d" % i
        wk_data = "data_%d" % i
        write_data(sheet_name, wk_data)
write_data()が3回まわって、そのたびにファイルを開いて保存してます。
これで最後の結果が前の結果を消していなければOKという、確認用のプログラムです。

このアーカイブについて

このページには、2010年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年5月です。

次のアーカイブは2010年10月です。

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

Powered by Movable Type 4.27-ja