JXLS 标签含中文,解决使用中文标签报错问题

简介: JXLS 标签报错

说明

使用JXLS根据模板填充数据时,若模板上绑定的标签中含中文将会报错

详细字段绑定

一个详细字段,若在模板绑定成:${test.姓名},将会报错如下:

2021-01-28T11:13:58.284+08:00 [main] [org.jxls.transform.poi.PoiTransformer] [ERROR] - Failed to write a cell with CellData{Sheet2!C3, cellType=STRING, cellValue=${test.姓名}} and context keys [img, test2, test.name, student, nowdate, test.姓名, employees1, employees2, employees, test1]
org.jxls.expression.EvaluationException: An error occurred when evaluating expression test.姓名
    at org.jxls.expression.JexlExpressionEvaluator.evaluate(JexlExpressionEvaluator.java:70) ~[jxls-2.9.0.jar:?]
    at org.jxls.common.CellData.evaluate(CellData.java:292) ~[jxls-2.9.0.jar:?]
    at org.jxls.common.CellData.evaluate(CellData.java:262) ~[jxls-2.9.0.jar:?]
    at org.jxls.transform.poi.PoiCellData.writeToCell(PoiCellData.java:129) ~[jxls-poi-1.0.15.jar:?]
    at org.jxls.transform.poi.PoiTransformer.transform(PoiTransformer.java:152) ~[jxls-poi-1.0.15.jar:?]
    at org.jxls.area.XlsArea.transformStaticCell(XlsArea.java:427) ~[jxls-2.9.0.jar:?]
    at org.jxls.area.XlsArea.transformTopStaticArea(XlsArea.java:400) ~[jxls-2.9.0.jar:?]
    at org.jxls.area.XlsArea.applyAt(XlsArea.java:165) ~[jxls-2.9.0.jar:?]
    at org.jxls.util.JxlsHelper.processTemplate(JxlsHelper.java:222) ~[jxls-2.9.0.jar:?]
    at com.sunwayworld.jxls.JxlsUtils.exportExcel(JxlsUtils.java:37) ~[classes/:?]
    at com.sunwayworld.jxls.ObjectCollectionDemo.main(ObjectCollectionDemo.java:72) ~[classes/:?]
Caused by: org.apache.commons.jexl3.JexlException$Tokenization: org.jxls.expression.JexlExpressionEvaluator.evaluate@1:6 tokenization error in ''
    at org.apache.commons.jexl3.JexlEngine.createExpression(JexlEngine.java:304) ~[commons-jexl3-3.1.jar:3.1]
    at org.jxls.expression.JexlExpressionEvaluator.evaluate(JexlExpressionEvaluator.java:65) ~[jxls-2.9.0.jar:?]
    ... 10 more

解决办法,改为:${test."姓名"}

表格绑定

若是表格的模板绑定如下:
表格绑定示例

解决办法

也就是涉及标签中包含中文的,就将标签中文部分用双引号包裹即可

为什么出现中文

在出现问题后,网上查找到的几乎算是没找到解决办法,可能大家都不涉及到标签含中文的情况吧,都是将模板所需数据来源定义为对象或List

为什么会有中文标签的用法,比如表格的数据源支持List<Bean类型>的集合,也支持List<Map<String, Object>>这样的集合类型,自定义SQL,将SQL查询结果集作为JXLS模板表格的数据来源,若SQL中列为中文别名则会出现需要绑定标签含中文的情况

JXLS标签中含中文报错的原因

这个原因经过排查,暂时没找到,但是经过自己尝试后发现标签中用英文双引号包裹中文部分可以支持,大致的原因应该如下:

// java语法不支持这样的定义
String name = 姓名;

// 支持这样的定义
目录
相关文章
element-plus组件默认英文设置中文
element-plus组件默认英文设置中文
199 0
|
JavaScript
element-plus 按需引入将英文组件修改为中文
element-plus 按需引入将英文组件修改为中文
element-plus 按需引入将英文组件修改为中文
|
1月前
常用文本格式标签例子
常用文本格式标签例子。
24 3
|
4月前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
|
4月前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
|
5月前
|
前端开发
【零基础入门前端系列】—超链接和文本格式化标签(四)
【零基础入门前端系列】—超链接和文本格式化标签(四)
|
前端开发
css 实现标签内容多行截取(...)数字换行--英文--文字处理
css 实现标签内容多行截取(...)数字换行--英文--文字处理
|
API Python
英文文档帮查&翻译计划
英文文档帮查&翻译计划
97 0
HTML基础教程3——文本格式化标签与媒体标签
文本格式化标签和正常标签一样是可以嵌套的!可以嵌套的!可以嵌套的!重要的事情要强调三遍。
HTML基础教程3——文本格式化标签与媒体标签
|
开发者
注释标签|学习笔记
快速学习注释标签
注释标签|学习笔记