目录
- 一、问题描述
- 二、使用EasyExcel的版本
- 三、场景复现
- 四、问题修复
一、问题描述
使用EasyExcel读取文件数据时,出现数据无法读取情况。
二、使用EasyExcel的版本
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version>
</dependency>
三、场景复现
使用了@Accessors(chain = true)
(lombok.experimental.Accessors
)注解导致无法读取excel文件中的数据。
读取对象定义如下:
@Data
@Accessors(chain = true)
@EqualsAndHashCode
public class DemoDTO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "编号")@ExcelProperty("编号")private String number;@ApiModelProperty(value = "名称")@ExcelProperty("名称")private String name;
}
读取逻辑如下:
private List<DemoDTO> parseExcelFileData(MultipartFile multipartFile) {List<DemoDTO> demoDTOList = new ArrayList<>();// 创建临时文件File excelFile = FileUtil.createTempFile();try {// 文件转换multipartFile.transferTo(excelFile);Assert.notNull(excelFile, "文件不存在,请重新上传");EasyExcel.read(FileUtil.getInputStream(Objects.requireNonNull(excelFile))).sheet("Sheet1").head(DemoDTO.class).headRowNumber(1).registerReadListener(new AnalysisEventListener<DemoDTO>() {@Overridepublic void invoke(DemoDTO data, AnalysisContext context) {// 获取当前index
// Integer currentRowNum = context.readRowHolder().getRowIndex();// 校验格式if (BeanUtil.isNotEmpty(data)) {demoDTOList.add(data);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {log.info("数据读取完毕");}}).doRead();} catch (Exception e) {log.error("文件解析失败", e);} finally {FileUtil.del(excelFile);}return demoDTOList;}
四、问题修复
定义的映射类中不能使用@Accessors(chain = true)
(lombok.experimental.Accessors
)注解。
@Data
@EqualsAndHashCode
public class DemoDTO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "编号")@ExcelProperty("编号")private String number;@ApiModelProperty(value = "名称")@ExcelProperty("名称")private String name;
}