JXLS生成Excel文件时变量无法正常输出的问题求助
解决JXLS模板变量未渲染空白问题
针对你遇到的生成Excel后${employee.id}和${employee.login}显示空白、仅行数正确的问题,可按以下步骤排查解决:
1. 修正模板注释的指令识别问题
你当前的模板注释带了Author: 前缀,JXLS默认只会识别以jx:开头的注释指令,导致无法正确解析jx:area和jx:each指令。解决方式二选一:
- 修改模板注释:直接将单元格注释改为
jx:area(lastCell="D4")和jx:each(items="employees" var="employee" lastCell="D4"),去掉Author:前缀。 - 代码中配置注释前缀:如果需要保留
Author:前缀,在创建模板填充器时指定表达式前缀:JxlsPoiTemplateFillerBuilder fillerBuilder = JxlsPoiTemplateFillerBuilder.newInstance(); fillerBuilder.setCommentAreaBuilder(new CommentAreaBuilder() { { setExpressionPrefix("Author: jx:"); } }); JxlsPoiTemplateFiller filler = fillerBuilder.build();
2. 确保Test类的字段可被访问
JXLS默认通过getter方法读取对象字段,若你的Test类字段为private且无对应getter,变量无法被读取:
- 给Test类添加getter方法:
public class Test { private Long id; private String login; public Long getId() { return id; } public String getLogin() { return login; } // 构造方法等其他代码 } - 或者配置JXLS直接访问字段(无需getter):
JexlExpressionEvaluator evaluator = new JexlExpressionEvaluator(); evaluator.setUseFieldAccess(true); JxlsPoiTemplateFillerBuilder fillerBuilder = JxlsPoiTemplateFillerBuilder.newInstance(); fillerBuilder.setExpressionEvaluator(evaluator);
3. 核对变量名与数据键的一致性
- 确认模板中
jx:each的items="employees"与代码中Map的键完全一致(包括大小写):Map<String, Object> dataMap = new HashMap<>(); dataMap.put("employees", employeeList); // 键必须是"employees",和模板一致 - 确认单元格中的
${employee.id}里的employee与jx:each的var="employee"完全一致,无拼写或大小写错误。
4. 验证依赖版本兼容性
确保jxls和jxls-poi版本完全匹配(均为3.0.0),避免版本不兼容导致的解析问题。
内容的提问来源于stack exchange,提问作者GB11
相关产品推荐
相关产品推荐

