和 issue 2983 同样的问题
用3.0.5版本就是正常的, 现在的话用3.2.1 最后一列 如果无值的话,invoke 里面那一行就会少一个最后的null。这感觉像是一个bug
一共21列数据
和 issue 2983 同样的问题
用3.0.5版本就是正常的, 现在的话用3.2.1 最后一列 如果无值的话,invoke 里面那一行就会少一个最后的null。这感觉像是一个bug
一共21列数据
package com;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.read.builder.ExcelReaderBuilder; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.util.Map;
public class Test {
public static void main(String[] args) {
//测试文件下载地址 https://file.ai.kxkx888.com/upload/file/20230413/168134782373902689.xlsx
String filePath = "C:\\Users\\26901\\Desktop\\test.xlsx";
try {
//根据魔数校验文件类型 todo
BufferedInputStream bufferedInputStream = null;
try {
bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if (null != bufferedInputStream) {
bufferedInputStream.close();
}
}
ExcelReaderBuilder excelReaderBuilder = EasyExcel.read(new File(filePath));//线上用;
excelReaderBuilder.registerReadListener(new ReadDataListener()).headRowNumber(2);
excelReaderBuilder.sheet(0).doRead();
} catch (Exception e) {
e.printStackTrace();
}
}
static class ReadDataListener extends AnalysisEventListener<Map<Integer, String>> {
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
System.out.println("size:" + integerStringMap.size());
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
}
请问该问题您能复现么,这边如果有什么参数配置可以设置的话可以告诉我 我尽早用上3.2.1 如果要等下一个版本的话 方便问一下有大概的预期时间么
这边建议你定义一个实体,可能是excel的问题,
但是我们业务系统是无实体类结构的后端 而且参数值也不固定的,不太好定义实体。 然后这个excel 在老版本是正常的,是新版本什么判断的情况变得严格了么
很多情况下客户可能也是复制别的excel的数据进来 用于导入 格式的话没办法保证一定要是怎么样, 目前我看起来excel还算是正常的, 这种情况 我跟客户说 你传过来的excel不对,他们无法理解,而且在之前都可以 他们可能认为是我们有问题
static class ReadDataListener extends AnalysisEventListener<Map<Integer, String>> {
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> cellDataMap, AnalysisContext context) {
context.readSheetHolder().setMaxNotEmptyDataHeadSize(CollectionUtils.size(cellDataMap));
}
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
System.out.println("size:" + integerStringMap.size());
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
确实两个版本有改动,你先用这种方式解决问题
后面我会关注一下这个 感谢你