日々常々

ふつうのプログラマがあたりまえにしたいこと。

POIを使ってみる/概要

JavaからExcelファイルを操作するにはいくつか方法がありますが、POIを使う機会に恵まれたのでつらつらと書いてみようと思います。とりあえず今回は概要レベルで。
現在の最新版は3.6です。日本語ドキュメントは3.0で止まってたりするけど、使い方程度なら差は無いので、とりあえずさらっとは読んでおくといいと思います。
Apache POI - the Java API for Microsoft Documents
http://poi.terra-intl.com/

POIでExcelファイルを扱う場合、ファイルの情報は単純な階層構造で扱われます。Workbookを先頭とし、Sheet、Row、Cellと親子関係になっています。

Workbook
 +--Sheet
     +--Row
         +--Cell

ExcelVBAの知識があれば、WorkbookはそのままWorkbook、SheetはWorksheetとそれぞれ対応するので理解が早いと思いますが、その先は少々異なります。Sheet内の1セルを取得するにしても、まずそのセルのRowを取得した後にCellを取得しなければなりません。もっとも、このあたりは簡単なメソッドを定義しておけば良い話ではあります。

Excelファイルと一口に言っても、Excel2007以降は二種類のファイルの可能性があります。基本的に拡張子で見分けがつけられ、*.xlsとなっている旧形式と、*.xlsxとなっているOffice2007以降の形式があります。今後は*.xlsxが主流になるのかどうかは判然としませんが、現時点では*.xlsが主流だと思います。ともかく、対象とするファイルのフォーマットは二種類あります。
POIではこのフォーマットに対してそれぞれ、HSSFとXSSFという名前で呼ばれることになります。HSSFWorkbookクラスはxls形式のWorkbookインタフェースの実装であり、XSSFSheetクラスはxlsx形式のSheetインタフェースの実装です。

HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.

POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files


POIでExcelファイルを扱うサンプルを検索すると、HSSFWorkbookクラス以下、HSSFSheetクラスなどで扱っている例が多く見られると思いますが、実装時はインタフェースのWorkbookなどで行うのが良いです。新規Workbookの作成とファイル読み込みは以下のようになります。

//新規作成
Workbook book1 = new HSSFWorkbook();

//ファイル読み込み
Workbook book2 = WorkbookFactory.create(new FileInputStream("./inputFile.xml"));

Workbook等は本体(poi-3.6-20091214.jar)にあり、WorkbookFactoryはOOXML(poi-ooxml-3.6-20091214.jar)にあります。WorkbookFactoryが見当たらないという場合はJarをクラスパスに追加してください。


Workbookのファイル出力はWorkbook#writeを使用します。

OutputStream out = new FileOutputStream("./outputFile.xml");
book1.write(out);
out.close();

概要とか書きつつ、概要になっていない気がしますが、その辺りはいつもどおりという事で目をつぶる方向でお願いします。色々と調べているうちに結構ネタは溜まったので、ぼちぼち書いていく予定。