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组件默认英文设置中文
208 0
itextpdf 中文不显示问题
# 现象 itextpdf 打印时中文字体显示不出来,莫名其妙的消失不见了。具体现象如下图所示。 ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/ddc69588-4fc6-46ff-9d33-07f99340c963.png) 真正的理想情况如下图。 ![](https://ata2-img.oss-cn-zhangj
itextpdf 中文不显示问题
|
JavaScript
element-plus 按需引入将英文组件修改为中文
element-plus 按需引入将英文组件修改为中文
element-plus 按需引入将英文组件修改为中文
|
6月前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记)
|
6月前
|
Python
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
Python基础教程(第3版)中文版 第20章 项目1: 自动添加标签(纯文本转HTML格式) (笔记2)
|
前端开发
css 实现标签内容多行截取(...)数字换行--英文--文字处理
css 实现标签内容多行截取(...)数字换行--英文--文字处理
HTML基础教程3——文本格式化标签与媒体标签
文本格式化标签和正常标签一样是可以嵌套的!可以嵌套的!可以嵌套的!重要的事情要强调三遍。
HTML基础教程3——文本格式化标签与媒体标签
HTML基础教程5——链接标签和字符实体
跳转超链接时通过<a>标签定义的,链接用于跳转页面或者跳转书签等等,<a href="#">元素</a>标签a中的元素为自定义内容,一般用于提示点击链接着跳转链接后的东西,或者跳转链接的作用之类的。
HTML基础教程5——链接标签和字符实体
|
开发者
注释标签|学习笔记
快速学习注释标签
注释标签|学习笔记
|
开发者
HTML标签 -base标签|学习笔记
快速学习HTML标签 -base标签
HTML标签 -base标签|学习笔记