まとめ
- Fisshplate – Fisshplate Home
- Fisshplate のオブジェクトに POI のオブジェクトを渡してエクセルに反映する場合、反映のためにアクセスされるのは POI のプロパティではなく POI のゲッターメソッド
- POI には、ゲッターメソッドさえあれば良い。プロパティはなくても良い。
- POI のゲッターメソッド名が getAbcDef() の場合は、エクセルテンプレートの ${abcDef} に反映される。
- oki2a24/testfisshplate: Fisshplate ライブラリの使い方、調査サンプルです に試した内容を置いた。
やってみた。準備編
Fisshplate といえば Seasar2 フレームワークで使用すると真価を発揮するそうですが、今回は Gradle です。
適当なディレクトリを作成し、gradle init --type java-application
します。その後、次のようにファイルを修正しました。また、test ディレクトリは使用しないため削除しました。さらに、src/main/resources/aaaa/sample.xls ファイルを追加しました。
plugins { id 'java' id 'application' } mainClassName = 'App' dependencies { compile group: 'org.seasar.fisshplate', name: 'fisshplate', version: '0.1.4' } repositories { jcenter() maven { url "https://www.seasar.org/maven/maven2/" } }
import java.io.FileOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.seasar.fisshplate.template.FPTemplate; public class App { public static void main(String[] args) throws Exception { Map<String, Poi> map = new HashMap<String, Poi>(); map.put("data", new Poi()); InputStream is = App.class.getClassLoader().getResourceAsStream("aaaa/sample.xls"); System.out.println(App.class.getClassLoader().getResource("aaaa/sample.xls")); // debug: テンプレートのパス FPTemplate template = new FPTemplate(); HSSFWorkbook wb; try { wb = template.process(is, map); } catch (Exception e) { //例外処理 throw e; } FileOutputStream fos = new FileOutputStream("out.xls"); wb.write(fos); fos.close(); } }
ポイントは次のコードです。POI ですけれども、あえてプロパティをなくし、ゲッターメソッドのみです。
public class Poi { public Integer getNumOne() { return 1; } public Integer getNumTwo() { return 1 + 1; } public Integer getNumThree() { return 1 + 2; } }
src/main/resources/aaaa/sample.xls は、次のようにしました。
- A1 セル: ${data.numOne}
- A2 セル: ${data.numTwo}
- A3 セル: ${data.numThree}
やってみた。実行、結果編
$ gradle run > Task :run file:/Users/oki2a24/testfisshplate/build/resources/main/aaaa/sample.xls BUILD SUCCESSFUL in 2s 3 actionable tasks: 3 executed $
out.xls が Gradle プロジェクトのホームディレクトリの作成されていましたので開いてみると、テンプレートに POI のゲッターメソッドの値が反映されています!
おわりに
ゲッターメソッドが大事ということがわかりましたので、プロパティの値等の計算結果をゲッターメソッドの返り値として用意するなどすれば、応用範囲が広がりますね♪
よいことが知れました。
以上です。