上篇文章带各位小伙伴完成excel导入功能快速实现,很简单对吧。
最近因为公司业务要求数据清洗,被迫快速实现导入业务整理的数据进行处理。
业务:2个小时可以完成吧?
我:嗯,应该没问题(您们真把我们开发当神仙呢)。
还好之前做过导出功能,导入应该也不远了,不慌!
那么接下来给大家输出excel导入实现
二、核心方法com.alibaba easyexcel 2.2.11
public static void readExcel(String filePath, Class clazz){
FileInputStream fis;
try {
fis = new FileInputStream(filePath);
readExcel(fis, clazz);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static Boolean readExcel(InputStream is, Class clazz){
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(is);
// 解析每行结果在listener中处理(所以我们接收逻辑需要在监听器里面处理)
AnalysisEventListener listener = new ExcelListener();
ExcelReader excelReader = EasyExcelFactory.getReader(bis, listener);
excelReader.read(new Sheet(1, 1, clazz));
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
public class ExcelListener extends AnalysisEventListener {
//自定义用于暂时存储data。
//定义成静态变量,不过要注意的是我们try-catch导入逻辑的时候记得要在finally手动调用clear()方法,因为我们可能在解析excel的时候抛异常了,这个时候doAfterAllAnalysed()方法是不会执行的,如果没有清空静态变量的数据就会有脏数据(也就是上次解析成功的数据还在)
public static List
到这里我们就把整个核心逻辑搭建好啦,是不是很简单,接下来给大家跑个例子。
三、实战- 定义一个导入文件接收实体类
import com.alibaba.excel.annotation.ExcelProperty;
@Data
public class ExcelimportRequestDTO {
@ExcelProperty(index = 0)
private String name;
@ExcelProperty(index = 1)
private String age;
}
注:这边@ExcelProperty 注解用来映射excel列数。index的值就代表excel的列数(如:index=0表示映射到excel第一列)
- 定义一个http接口
@PostMapping("/import")
public void importTest(@RequestBody Map params) {
ExcelUtil.readExcel(params.get("filePath"), ExcelimportRequestDTO.class);
try{
// 直接拿监听器的静态list
List
- 调用http接口导入数据
准备导入文件
导入过程,我们可以看到调用了invoke方法,我们可以在invoke方法做一些我们想做的事情哈哈,别想歪了哦,比如:add()到静态list里面或者直接存到数据都是可以的。
到这里就完成了整个Java之Excel导入功能的实现,其实也很简单对吧,大家只需要Ctrl+C、Ctrl+V就可以快速应用啦,希望可以帮助到大家,上期已输出excel导出功能的实现!
加油打工人!奥利给
我是rose,感谢各位的观看,各位的点赞就是rose输出的最大动力,我们下篇文章见!
注:如果本篇博客有任何错误和建议,欢迎人才们留言!
五、系列推荐《Java之Excel导出功能快速实现》



