Jakarta-POIをいじりはじめる

前述の通り、本来はExcel向きじゃない帳票を楽に編集できるように、Jakarta-POIでいろいろやってみることにしました。

とりあえず本家サイトを読みつつ、↓のサイトを写経中。
http://www.javadrive.jp/poi/index.html


本家サイトをあまり詳しく読んでないのですが、以下POIの設計に関する所感。
* * *


オブジェクトの階層が面白いです。
まずはブックオブジェクトがトップに存在します。
で、ブックオブジェクトの中にシートオブジェクトがあります。
次にシートオブジェクトの中にセルオブジェクト・・・ではなく、行(row)オブジェクトが存在します。
そして、行オブジェクトの中にセルオブジェクトが含まれています。

この、セル単位ではなく行単位でオブジェクトを管理するというのが面白いです。1行を1つのデータの集合と見なして操作するという方針は、確かに自然で一般的な形かもとちょっと納得しました。

ただ、実際コーディングしてみると、この方針は結構回りくどく感じます。
セルオブジェクトを取得したい場合、一度行オブジェクト取得し、その行オブジェクトからせるオブジェクトを取得しなければなりません。コードを打ってみる結構ダルいです。
しかも指定行が空行の場合、どうやら行オブジェクトが存在しない(null)とみなされるらしく、空行のセルに対して新しくデータを入力する場合も、行オブジェクトの初期化(インスタンス化)をしてからでなければいけない。これがまたまた面倒。


これとは逆に、JExcelなんかはワークシートオブジェクトに問い合わせて直接セルオブジェクトを取得するようです。POIと違って行オブジェクト経由でセルを取得する必要がないので、セル単位での操作はかえって楽な気がします。ここらへんの思想の違いが垣間見られてなんか楽しいです。


その他、POIの場合、シート名称はシートが持つ情報ではない(?)ようです。getName()メソッドを提供しているのはシートオブジェクトではなく、なんとブックのオブジェクト。ブックがシートに対して名前をつけて管理し、シート自身は自分がどういう名前を付けられているのかを認知しないというのも、なんだかナルホドと思わせられます。




* * *
と、現在はまだこのくらいしかいじってませんが、結構いろいろ考えさせられて面白いです。自分
の「業務帳票作成の手間を軽減する」という目的を見失わない程度に、いろいろ勉強していこうと思います。


誤りがありましたら、ご指摘・ツッコミよろしくお願いします。