できたぞー
考課面談が終わったら頭が切り替わってすぐ出来た。
HSSFDataFormatには、POIで用意したビルトイン書式しかなくって、ユーザー定義は勿論、如何にも日本向けのみの書式も入ってない。
で、HSSFDataFormatのインスタンスメソッドに、getFormat(String format)ってのがあって、formatに指定した書式が存在しないと内部的に書式を追加して、そのインデックスをshortで戻してくれる。
なので、こんな感じ。
- templateWb テンプレート側ワークブック
- templateStyle テンプレート側のセルのスタイル
- outWb 出力するワークブック
- outStyle 出力するセルに食わせるスタイル
として、テンプレート側セルの書式を出力側スタイルにコピーする。
short dfIdx = templateStyle.getDataFormat(); HSSFDataFormat templateDf = templateWb.createDataFormat(); String formatString = templateDf.getFormat(dfIdx); HSSFDataFormat outDf = outWb.createDataFormat(); short outDfIdx = outDf.getFormat(formatString); outStyle.setDataFormat(outDfIdx);
これでユーザー定義もなんのその(の予定)だー。
createDataFormatって名前が、なんかぱかぱかインスタンス作ってそうで動きが心配なんだけど、ソースを見たら
public HSSFDataFormat createDataFormat() { if (formatter == null) formatter = new HSSFDataFormat(workbook); return formatter; }
だった。
さてリファクタリングしよう。