カテゴリー
コンピューター

Fisshplate でテンプレートに埋め込まれるのはゲッターメソッド

まとめ

  • 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 のゲッターメソッドの値が反映されています!

出力された結果エクセルファイル

おわりに

ゲッターメソッドが大事ということがわかりましたので、プロパティの値等の計算結果をゲッターメソッドの返り値として用意するなどすれば、応用範囲が広がりますね♪

よいことが知れました。

以上です。

コメントを残す