Jakarta POI を眺める

 Jakarta POI

それは、Java というプログラミング言語Microsoft 社の Office シリーズを操作してやろうというライブラリ構築プロジェクトのことである。

MSWordやMSExcelを操作するには、Microsoft OLE の Word 関連のオブジェクトExcel 関連のオブジェクトなど (以下これらを単に OLE とする)を利用するのが手っ取り早いのだが、Windows以外のプラットフォームで…という条件がつけられたり、プログラミング言語Java という言語を選択した場合、これを使うことができない
よって、Java を使うときには Java 用に OLE を加工したものを利用するかして、何らかのインターフェースが必要となる。

Jakarta POI は Java だけで作りこんだインターフェースであり、Windows 以外の環境でも利用できる代物だ。
ただし、POI が

Poor Obfuscation Implementation (不十分で曖昧な実装)

を意味しているだけあり、かなり機能的にも不十分であるのは否めない。
それはMS Office製品がかなり複雑な構造をしていることも絡んでいるのであろうことから、仕方がないとはいえると思う。

現在、業務で Jakarta POI をもう少し使いやすいよう加工するように、という指令を受けているので、この POI を眺めている。
Visual Basic などから OLE をたらふく利用してきたCAMUS としては、OLE と比較してどこがどう違うか、どういう機能が足りないのかを検証するのが手っ取り早い。

大雑把に POI と OLE との間には、

 構造の違い
 捜査範囲の違い


の2つの違いがあるように思える。
ここでは、この2つの違いについて、少しだけ述べてみようと思う。

【構造の違い】
OLEの例えば、Excel関連のオブジェクトは大雑把にこのような構造になっている。

Application
└ Workbooks
 └ Workbook
  └ Worksheets
   └ Worksheet
    ├ Range
    │ └ Cells
    │   └ Cell
    ├ Rows
    │ └ Cells
    │   └ Cell
    └ Columns
      └ Cells
        └ Cell


対して、POI のExcel操作系の構造はこうだ。

Workbook
└ Worksheet
 └ Row
  └ Cell


OLE が Excel と言うアプリケーション上でワークブックやシートを操作しようとしているようなイメージに対し、POI はExcelのファイルそのものに直接働きかけるといったイメージに捉えると、この構造の違いがわかると思う。

また、Javaではありがちなコレクション(リスト)構造のオブジェクトが POI にはない。
Row(行)を取り出すことはできるが、Column(列)を取り出すことができない、などまだオブジェクト自体が足りない感が残る。

【操作範囲の違い】
構造の違いでも書いたが、OLE が Excel と言うアプリケーション上でワークブックやシートを操作しようとしているようなイメージに対し、POI は Excel のファイルそのものに直接働きかけるイメージがある。

1) POI にはActiveSheetと言う観念が希薄?

Excelのシートを開くと、一番手前に表示されているシートが存在する。
それがActiveSheetなのだが、POI には、そのActiveSheetがどれかと言う感覚があまりないようだ。
そのくせ、どのシートを選択するか、というメソッドは用意されている。不思議だ。(^^;)

2) POI は行の操作はできるが、列の操作は苦手?

Rowというオブジェクトは存在するが、Columnというオブジェクトは存在しない。
よって、列で操作する場合には、一旦行を取り出してから、同じ列番号のセルを取り出す、というややこしいことをしなくてはならない。

3) オートフィルターなどの機能は使えない?

Excelの便利機能・オートフィルターやピボットテーブルのような機能は、まだ未完成のようだ。
当然、マクロなども動かない。

とりあえず、セルに対してのデータの読み書き、罫線やセルのスタイルなどが操作でき、印刷周りさえできれば何とかなるだろう…という感じである。
確かにそれができれば、何とかなるであろう。


…と、こんな感じで適当にレビューしてみた。(テキトーすぎ)
参考までに、どういう感じで使ってみるとよいのか、サンプルがのっているサイトを紹介して終わりにしたいと思う。

Jakarta POIでExcelを操作する
Jakarta POIを用いたExcelファイルの入出力 〜POI HSSFを用いたExcel簡単入出力〜
POIを使用してJavaからExcelデータを読み込む
POIを使用してJavaからExcel出力を行う