By default Jxls uses Apache JEXL expression language to evaluate property expressions specified in Excel template file.
See JEXL Syntax Reference to see what expressions can be used.
If you need to customize Jexl processing you can get a reference to JexlEngine from Transformer and apply necessary configuration.
For example the following code registers a custom Jexl function under demo namespace
Transformer transformer = TransformerFactory.createTransformer(is, os); ... JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig().getExpressionEvaluator(); Map<String, Object> functionMap = new HashMap<>(); functionMap.put("demo", new JexlCustomFunctionDemo()); evaluator.getJexlEngine().setFunctions(functionMap);
Here JexlCustomFunctionDemo class has a method
public Integer mySum(Integer x, Integer y){ return x + y; }
So in your template you can use this function like
${demo:mySum(x,y)}
where x and y are parameters from Context
See JexlCustomFunctionDemo.java for a full example.
You may prefer not to use Apache JEXL but use some other expression processing engine (for example use Spring Expression Language (SpEL) ).
Jxls allows you to substitute the default evaluation engine with the one you prefer.
To do this you should just implement a single method of ExpressionEvaluator interface to delegate the expression evaluation processing to the engine you want
public interface ExpressionEvaluator { Object evaluate(String expression, Map<String,Object> context); }
And then you need to pass your ExpressionEvaluator implementation to TransformationConfig as shown in the below code
ExpressionEvaluator evaluator = new MyCustomEvaluator(); // your own implementation based for example on SpEL transformer.getTransformationConfig().setExpressionEvaluator(evaluator);