public class EasyExcelListener<T> extends AnalysisEventListener<T> {

    private static Logger logger = LogManager.getLogger(EasyExcelUtil.class);


    private final List<T> list = new ArrayList<>();


    @Override
    public void invoke(T data, AnalysisContext context) {
        list.add(data);
    }

    public List<T> getList() {
        return list;
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        logger.debug("读取完成,读取{}条数据",list.size());
    }
}
public class EasyExcelUtil {

    private static Logger logger = LogManager.getLogger(EasyExcelUtil.class);

    //导入文件,参数为文件路径
    public static <T> List<T> read(String filePath, final Class<?> clazz) {
        File f = new File(filePath);
        try (FileInputStream fis = new FileInputStream(f)) {
            return read(fis, clazz);
        } catch (FileNotFoundException e) {
            logger.error("文件{}不存在", filePath, e);
        } catch (IOException e) {
            logger.error("文件读取出错", e);
        }
        return null;
    }

    //导入文件,参数为文件流
    public static <T> List<T> read(InputStream inputStream, final Class<?> clazz) {
        if (inputStream == null) {
            logger.debug("解析出错了,文件流是null");
            return null;
        }
        // 有个很重要的点 DataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
        EasyExcelListener<T> listener = new EasyExcelListener<>();
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(inputStream, clazz, listener).sheet().doRead();
        return listener.getList();
    }
}