easyexcel
easyexcel copied to clipboard
[fix]修复 inlineStr 类型可能存在的数据读取错误
关联issue:
#3860 #3823
修复原因:
- 在 excel 的 XML 文件中,
<c>
标签且标记为inlineStr
类型的数据类别下,<v>
标签为无效且错误数据,WPS和office都会默认过滤该标签,同时进行纠错; - 使用 poi 进行excel读取操作,poi 会主动过滤
<c>
标签且标记为inlineStr
下的<v>
标签。
代码逻辑:
- 将
CellDataTypeEnum
的str
匹配至ERROR
str
标签是正常的String标签,对于xml文件来说,可以存放大部分的标签数据。原来的str
匹配的是DIRECT_STRING
,就会导致诸多规则不匹配的问题。 修改后,因为取值时,ERROR
和DIRECT_STRING
的取值规则都是一致的,因此可以直接兼容。
//CellTagHandler-> ERROR 和 DIRECT_STRING 的取值规则一致
case DIRECT_STRING:
case ERROR:
tempCellData.setStringValue(tempDataString);
tempCellData.setType(CellDataTypeEnum.STRING);
break;
- 在SAX 中进行规则判断
在
XlsxRowHandler
的public void characters(char[] ch, int start, int length)
函数中,对inlinStr
进行判断,如果此时数据结构为DIRECT_STRING
,并且标签为<v>
的时候,不进行解析,直接跳过。