Apache POIのExcel2007対応について

昨年末にApache POIのOffice2007対応版のベータ4版が出たのでためしてみた。

・旧バージョンとの比較(EXCELの場合)

Apache POI 3.2系=HSSF(〜Excel2003)
Apache POI 3.5系=HSSF(〜Excel2003)+XSSF(Excel2007)

3.5系ではHSSFとXSSFをまとめるスーパーインターフェースができてる。
パッケージ的には「SS」
H”SS”F⇒SS
X”SS”F⇒SS 
の部分を取ったんだろう。

以下、スーパーインターフェース

org.apache.poi.ss.usermodel.Cell
org.apache.poi.ss.usermodel.Row
org.apache.poi.ss.usermodel.Sheet
org.apache.poi.ss.usermodel.Workbook

で、xlsxとxlsを統一的に処理するためには
WorkbookFactoryクラスのcreateメソッドを使えば良い。
以下サンプルソース

import java.io.FileInputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

/*
 * 作成日 (creation date)  :2009/01/14
 * パッケージ  (package name) :
 * ファイル名  (file name)    :PoiTest.java
 */

/**
 * <i>概要(abstract)</i>: POIテスト
 * .<p>
 * POIテスト
 * 
 *
 * @author  kensir0u
 * @version 1.0
 * @since   JDK 5.0
 *
 */
public class PoiTest {
	public static void main(String[] args) throws Exception{
		String fileName = "Test.xlsx"; //or Test.xls
		Workbook wb = WorkbookFactory.create(new FileInputStream(fileName));
		Sheet s =wb.getSheetAt(0);
		Row r = s.getRow(0);
		Cell c = r.getCell(0);
		c.setCellValue("日本語");
	}
}


あと3.2系では日本語はcell.setCellValue(new HSSFRichTextString("日本語"))って記述しなきゃならなかったんだけども
3.5系では対応されてるみたいでHSSFRichTextStringの記述は不要
※正確には@deprecatedだったものが解消された。
3.2系はcell.setCellValue("日本語")の記述は可能だがメソッドに@deprecated指定されている。


便利になった反面、気になるところが外部Jarの依存が増えたところ。
Excel2007(XMLフォーマットベース)を利用するのであれば
依存Jarが多々。

以下 依存Jar

・log4j-1.2.13.jar //たぶんopenxml4jに依存 詳しく見てないけど、ないとエラー起きた。
・dom4j-1.6.1.jar //DOM
・jsr173_1.0_api.jar //JSR173
・ooxml-schemas-1.0.jar //OOXML(ECMA376) 
・openxml4j-1.0-beta.jar //dom4j依存 OpenXMLのAPI 直接POIで使ってる
・xmlbeans-2.3.0.jar //ooxml-schemas依存 直接POIで使ってる


download はこちら⇒ http://www.apache.org/dyn/closer.cgi/poi/dev/
上記Jarも含まれています。