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组件默认英文设置中文
178 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 中文不显示问题
|
11月前
|
前端开发
css 实现标签内容多行截取(...)数字换行--英文--文字处理
css 实现标签内容多行截取(...)数字换行--英文--文字处理
|
开发框架 .NET
HTML 段落标签 文本显示标签
HTML 段落标签 文本显示标签
73 0
HTML基础教程3——文本格式化标签与媒体标签
文本格式化标签和正常标签一样是可以嵌套的!可以嵌套的!可以嵌套的!重要的事情要强调三遍。
HTML基础教程3——文本格式化标签与媒体标签
数据集的文字标签(label)转成数字标签
数据集的文字标签(label)转成数字标签
数据集的文字标签(label)转成数字标签
|
机器学习/深度学习 前端开发 数据建模
HTML标签中英文对照
标签 对应英文 说明 &lt;!-- 内容 --&gt; 注释 &lt;!DOCTYPE&gt; document type a anchor [&#39;æŋkə] 锚超链接 abbr abbreviation [əbriːvɪ’eɪʃ(ə)n] 缩写缩写词 acronym acronym [&#39;ækrənɪm] 首字母缩略词缩写词 address address [ə’dres] 地址联系信息
|
数据采集 前端开发 开发者
标签的语义化及标题标签|学习笔记
快速学习标签的语义化及标题标签
标签的语义化及标题标签|学习笔记
html+css实战12-文本格式化标签
html+css实战12-文本格式化标签
83 0
html+css实战12-文本格式化标签
【Echart】处理中文类目需要加双引号才可以显示
【Echart】处理中文类目需要加双引号才可以显示
94 0
【Echart】处理中文类目需要加双引号才可以显示