準備
ソースコード (download)
package org.netf.samples.jett_loop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.ss.usermodel.Workbook;
import net.sf.jett.transform.ExcelTransformer;
/**
* Template Engine JETT Loop Sample
*/
public class SampleMain {
public static void main(String[] args) throws Exception {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String path = loader.getResource("output").toURI().getPath();
ExcelTransformer transformer = new ExcelTransformer();
Map<String, Object> param = new HashMap<>();
try (InputStream in = loader.getResourceAsStream("template/sample-template.xlsx");
OutputStream out = new FileOutputStream(new File(path, "sample.xlsx"));) {
Workbook workbook = transformer.transform(in,
Arrays.asList("loop"), // テンプレートのシート名
Arrays.asList("result"), // 出力ファイルのシート名
Arrays.asList(param) // パラメータ
);
workbook.write(out);
workbook.close();
}
}
}
テンプレートのEXCELには以下のJETTタグを埋め込んでいます。
A2セル:<jt:for start="1" end="9" step="1" var="y">
B2セル:<jt:for start="1" end="9" step="1" var="x" copyRight="true">${x*y}</jt:for>
C2セル:</jt:for>
ちょっとしたポイント
ループを使って連続で値を配置する場合、<jt:for> や <jt:forEach> のタグを使います。 デフォルトではセルの縦方向にループします。copyRight 属性を true にすると横方向にループします。
感想
ここでの copyRight は著作権の意ではなく、右方向にコピー。。。