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も含まれています。