[alibaba/easyexcel]Excel中的TRUE 变成了Java中的 true

2023-02-17 856 views
5
异常代码
 List<Map<Integer, String>> recordList = EasyExcel
      .read(in)
      .readDefaultReturn(ReadDefaultReturnEnum.STRING)
      .sheet(0).headRowNumber(0).doReadSync();
异常提示

无异常

问题描述

Excel中某一列单元格格式为General,值为TRUE 读取到内存中后为true

回答

9

这个是因为解析器的缘故,目前版本可能需要你自己使用实体进行操作。

0

单元格格式为General的时候,TRUE会被当做boolean类型来解析。

下面是从解压以后的xml中提取的TRUE对应的单元格格式: <c r="D1" t="b"> 对单元格的解析如下: 这是一个Excel电子表格中的单元格,其中包含一个数据项,具体解释如下:

是单元格标记; r="D1" 表示该单元格位于第四行第一列(D1); t="b" 表示该单元格中的数据类型为布尔型(boolean),即true或false。 EasyExcel会按照.readDefaultReturn(ReadDefaultReturnEnum.STRING) 这个配置,把boolean类型的值转换为String类型,以下是转换器代码:StringBooleanConverter ``` public class StringBooleanConverter implements Converter { @Override public Class supportJavaTypeKey() { return String.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.BOOLEAN; } @Override public String convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return cellData.getBooleanValue().toString(); } @Override public WriteCellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return new WriteCellData<>(Boolean.valueOf(value)); } } ``` 解决方式是:把单元格的格式调整为文本类型