S2VeloPoiみたいなの
を作ってみようと思ったら、なんかあっと云う間だった。
VeloPoiはこちら↓から戴いてそのまんま使うとして。
http://d.hatena.ne.jp/nowokay/20050526
public class S2VeloPoiInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 5774644597591718973L; public Object invoke(MethodInvocation invocation) throws Throwable { Method method = invocation.getMethod(); if (!MethodUtil.isAbstract(method)) { return invocation.proceed(); } Object[] arguments = invocation.getArguments(); if (arguments == null || arguments.length == 0) { return null; } Object bean = arguments[0]; Map<String,Object> map = new HashMap<String,Object>(); map.put("data", bean); Class<?> clazz = method.getDeclaringClass(); String templatePath = clazz.getName().replaceAll("\\.", "/") + "_" + method.getName() + ".xls"; InputStream is = ResourceUtil.getResourceAsStream(templatePath); POIFSFileSystem fs = new POIFSFileSystem(is); HSSFWorkbook wb = VeloPoi.merge(fs, map); return wb; }
とか、ソースの汚さは取り敢えずおいとくとして、まあ作っておいて、diconに登録しといて、インタフェースをこんな風に作って
public interface TestVeloPoi { HSSFWorkbook getWb(TestVeloPoiDto dto); }
Dtoは普通のBeanで。
テンプレートは例によって、「VeloPoiインタフェース名_メソッド名.xls」って名前にして同じパッケージ内に置いておく。テンプレートには「${data.hoge}」と書くと、dtoのhogeプロパティが参照出来る。
あとはVeloPoiの機能が全部使える。
diconに、TestVeloPoiのaspectで上のinterceptorかましたら、出来た。もっと早くやればよかった。