• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
职业熬夜选手
博客园    首页    新随笔    联系   管理    订阅  订阅

java导入Excel(使用阿里巴巴的easyexcel)

1. 第一步引入pom

引入easyexcel 的pom依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

我输出时和实体类字段Date(时间格式化)用到了fastjson 用到了就引入,用不到可以不引

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.75</version>
</dependency>

2. 第二步写代码

一定要有无参构造

@Data
public class ExcelEntity {
    private String name;
    @JSONField(format = "yyyy-MM-dd")
    private Date birthday;
    private Integer age;
}

此处我延续了AnalysisEventListener的泛型,(易扩展) 此类不支持Spring IOC

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

    private static final int BATCH_COUNT = 5;
    List<T> list = new ArrayList<T>();
    // 此处可传Spring IOC对象进行保存数据库
    public ExcelListener(){
    };
    // 读取每一条
    @Override
    public void invoke(T data, AnalysisContext context) {
        System.out.println(JSON.toJSONString(data));
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            list.clear();
        }
        list.add(data);
    }

     // 读取完毕后
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("读取完成!");
        saveData();
        list.clear();
    }
    
    // 保存操作
    private void saveData(){
        System.out.println("存入数据库");
    }
}

写接口Controller

@PostMapping("/addExcel")
public String addExcel(MultipartFile file) throws IOException {
    EasyExcel.read(file.getInputStream(), ExcelEntity.class, new ExcelListener<ExcelEntity>()).sheet().doRead();
    return "ok";
}

3. 测试结果

成功结果!

控制台输出结果!

{"age":1,"birthday":"2020-11-19","name":"张1"}
{"age":2,"birthday":"2020-11-19","name":"张2"}
{"age":3,"birthday":"2020-11-19","name":"张3"}
{"age":4,"birthday":"2020-11-19","name":"张4"}
{"age":5,"birthday":"2020-11-19","name":"张5"}
{"age":6,"birthday":"2020-11-19","name":"张6"}
存入数据库
{"age":7,"birthday":"2020-11-19","name":"张7"}
{"age":8,"birthday":"2020-11-19","name":"张8"}
{"age":9,"birthday":"2020-11-19","name":"张9"}
{"age":10,"birthday":"2020-11-19","name":"张10"}
读取完成!
存入数据库

有问题质询QQ:248048521,欢迎技术交流

posted @ 2021-05-19 15:54  职业熬夜选手  阅读(846)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3