栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java之Excel导入功能快速实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之Excel导入功能快速实现

前言

上篇文章带各位小伙伴完成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 datas = new ArrayList<>();

    @Override
    public void invoke(Object object, AnalysisContext context) {
        System.out.println("导入数据:"+ JSONUtil.toJsonStr(object));
        // 这边可以进行其他操作,如直接存入数据库
        datas.add(object);
    }
    
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
         datas.clear();//解析结束销毁不用的资源
    }

    public static void clear(){
        datas.clear();
    }
}
 

到这里我们就把整个核心逻辑搭建好啦,是不是很简单,接下来给大家跑个例子。

三、实战
  1. 定义一个导入文件接收实体类
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第一列)

  1. 定义一个http接口
@PostMapping("/import")
public void importTest(@RequestBody Map params) {
    ExcelUtil.readExcel(params.get("filePath"), ExcelimportRequestDTO.class);
    try{
        // 直接拿监听器的静态list
        List datas = ExcelListener.datas;
        log.info(JsonUtil.toJson(datas));
    }catch (Exception e){
        
    }finally {
        // 要养成释放资源的习惯哦
        ExcelListener.clear();
    }
}
 
  1. 调用http接口导入数据

准备导入文件

导入过程,我们可以看到调用了invoke方法,我们可以在invoke方法做一些我们想做的事情哈哈,别想歪了哦,比如:add()到静态list里面或者直接存到数据都是可以的。

四、总结

到这里就完成了整个Java之Excel导入功能的实现,其实也很简单对吧,大家只需要Ctrl+C、Ctrl+V就可以快速应用啦,希望可以帮助到大家,上期已输出excel导出功能的实现!

加油打工人!奥利给

我是rose,感谢各位的观看,各位的点赞就是rose输出的最大动力,我们下篇文章见!

注:如果本篇博客有任何错误和建议,欢迎人才们留言!

五、系列推荐

《Java之Excel导出功能快速实现》

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号