项目中经常会生成报表,使用模板工具JXLS来进行生成。同时有些金额需要千分位做逗号处理的情况,此时就要对数据进行处理,需要使用自定义函数。
官方网址
查询到官方网站有相应的代码
但是并不能正常编译
Engine 里头确实找不到对应的setFunctions方法
但是却找到了本体属性
透过使用链发现一处可以设置值的位置
因此,我们只需要调用Engine的构造器传入一个JexlBuilder
同时JexlBuilder 中的namespaces方法传入一个map,那这就类同于setFunctions。
于是,
代码已经呼之欲出了:
Transformer trans = TransformerFactory.createTransformer(templateIs, reportOs);
JexlExpressionEvaluator evaluator =(JexlExpressionEvaluator)trans.getTransformationConfig().getExpressionEvaluator(); //设置静默模式,不报警告
JexlBuilder jexlBuilder = new JexlBuilder();
Map<String , Object> myFunction = new HashMap<String , Object>();
myFunction.put("customUtil", new JexlUtils());
jexlBuilder.namespaces(myFunction);
JexlEngine engine= new Engine(jexlBuilder);
evaluator.setJexlEngine(engine);
贴上自定义方法截图
贴上模板截图和导出文件截图
大功告成,完美调用。