You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:33:13