easyexcel icon indicating copy to clipboard operation
easyexcel copied to clipboard

[fix]修复 inlineStr 类型可能存在的数据读取错误

Open psxjoy opened this issue 7 months ago • 0 comments

关联issue:

#3860 #3823

修复原因:

  1. 在 excel 的 XML 文件中,<c> 标签且标记为inlineStr类型的数据类别下,<v> 标签为无效且错误数据,WPS和office都会默认过滤该标签,同时进行纠错;
  2. 使用 poi 进行excel读取操作,poi 会主动过滤 <c> 标签且标记为inlineStr下的<v> 标签。

代码逻辑:

  1. CellDataTypeEnumstr匹配至ERROR str 标签是正常的String标签,对于xml文件来说,可以存放大部分的标签数据。原来的str匹配的是DIRECT_STRING,就会导致诸多规则不匹配的问题。 修改后,因为取值时,ERRORDIRECT_STRING 的取值规则都是一致的,因此可以直接兼容。
 //CellTagHandler-> ERROR 和 DIRECT_STRING 的取值规则一致
  case DIRECT_STRING:
  case ERROR:
      tempCellData.setStringValue(tempDataString);
      tempCellData.setType(CellDataTypeEnum.STRING);
      break;
  1. 在SAX 中进行规则判断 在XlsxRowHandlerpublic void characters(char[] ch, int start, int length)函数中,对 inlinStr进行判断,如果此时数据结构为DIRECT_STRING,并且标签为<v>的时候,不进行解析,直接跳过。

psxjoy avatar Jul 03 '24 13:07 psxjoy