项目中经常会生成报表,使用模板工具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);
贴上自定义方法截图

贴上模板截图和导出文件截图


大功告成,完美调用。
本文介绍了如何在项目中使用模板工具JXLS生成报表时,通过自定义函数处理金额数据,实现千分位逗号格式,并详细展示了如何设置JexlEngine和JexlBuilder以调用自定义方法的过程。
802

被折叠的 条评论
为什么被折叠?



