EasyExcel 文件导出工具类
原创
©著作权归作者所有:来自51CTO博客作者一直是菜鸟的原创作品,请联系作者获取转载授权,否则将追究法律责任
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();
}
}