Jakarta-POI-HSSFのHSSFCellUtilクラスが便利

文章にすると長くなるんで走り書きで勘弁してください。

これからJakarta-POIでExcelを操作しようという人は、まずHSSFCellUtilクラスを見てみてください。ググッても日本語の情報が10件もヒットしませんが、自分で実装すると面倒な処理が、ユーティリティメソッドとして用意されています。

2007/08/07追記
HSSFCellUtilクラスは、バージョン3.0.1で追加されました。
2.5.1以前では実装されていないのでご注意ください。


特に便利でオススメなのが、setCellStyleProperty(cell, workbook, propertyName, propertyValue) メソッドです。
なんでこれが便利かというと、POIでは「ある特定セルのスタイルを変更する」という処理を自分で実装するのが面倒だからです。


・・・で、なぜ面倒かを書くのが結構面倒なんで、ざっくりとだけ書いておきます。
POIでは、スタイルが全く同じセルが複数あった場合、複数のHSSFCellオブジェクト間で、1つのHSSFCellStyleオブジェクトが共有される構造になっています。

// セルAとセルBで、書式が全く同じ場合
HSSFCellStyle styleA = cellA.getCellStyle();
HSSFCellStyle styleB = cellB.getCellStyle();

assertTrue(styleA == styleB); // 同じオブジェクト

さて、ここでセルAの現在のスタイルに、新しくパラメータを追加したいとします。

// セルA"だけ"、表示形式を"#,##0"に変えたつもり
styleA.setDataFormat(2); //  2="#,##0"の表示形式を表すコード

しかし、styleAもStyleBも同じオブジェクトなので、styleBを参照しているセルBの表示形式も変わることになります。特定セルだけスタイルを変えたいなら、既存のHSSFCellStyleオブジェクトに対して変更を加えるのはマズそうです。となると、 
  新規のHSSFCellStyleオブジェクト styleN を用意する
   ↓
  styleAのプロパティをstyleN にコピーする
   ↓
  styleN に対し、追加したいスタイル情報を設定する
   ↓
  cellAに、styleN を設定する

という手順を実装しなければいけません。見るからに面倒そうです(特にプロパティの全コピーとか。)
で、この面倒な一連の処理をやってくれるのがsetCellStyleProperty メソッドなわけです。これさえあれば、特定セルだけのスタイル変更処理が楽になります。


とまぁこんな感じで、「setCellStylePropertyメソッドを使うと楽そうだな」というのがなんとなく伝わったら幸いです。実装の詳細とかは、ソースを見てみてくださいということで。