
目录
实现demo
配置maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
java代码(埋了个小坑)
1. Demodata类
作用可看作dto
@Data
public class DemoData{
// index是表格的下标 从0开始
@ExcelProperty(value = "名称",index = 0)
private String name;
@ExcelProperty(value = "性别",index = 1)
private String sex;
@ExcelProperty(value = "年龄",index = 2)
private Integer age;
}
2. 表格的表头枚举类
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public enum ImportColumnEnum {
NAME("*名称"),
SEX("*性别"),
AGE("*年龄");
private String headerName;
ImportColumnEnum(String headerName) {
this.headerName = headerName;
}
public static List<String> headerColumnEnums(){
ImportColumnEnum[] values = ImportColumnEnum.values();
return Stream.of(values).map(headColumn -> {
return headColumn.headerName;
}).collect(Collectors.toList());
}
}
3. 配置EasyExcel监听器
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.example.demo.entity.DemoData;
import com.example.demo.entity.ImportColumnEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
public class ExcelListener extends AnalysisEventListener<DemoData> {
@Autowired
private HttpServletRequest request;
/**
*
* @description 一行一行读取excel内容 可校验单行数据
* @date 2021/5/14 16:13
* @param demoData
* @param analysisContext
*/
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
// 这里的行数没有包括标题,所以这里需要加1
Integer currentRowNum = analysisContext.readRowHolder().getRowIndex()

本文档介绍了一个使用EasyExcel处理Excel数据时遇到的空指针异常问题,问题源于在监听器中通过注解注入的HttpServletRequest为null。为了解决这个问题,作者提出了创建一个处理类,将需要注入的对象放入处理类中,并在监听器中传入处理类的实例。改造后的监听器、serviceImpl和处理类的代码示例分别进行了展示,实现了在读取Excel过程中进行数据校验和存储。
最低0.47元/天 解锁文章
1389

被折叠的 条评论
为什么被折叠?



