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メソッドを使うと楽そうだな」というのがなんとなく伝わったら幸いです。実装の詳細とかは、ソースを見てみてくださいということで。