SpringBoot整合EasyExcel实现导入功能

1.导入Maven坐标

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

2.创建实体类

@Data
@EqualsAndHashCode(callSuper = false)
// TODO 注意:此实体类的字段顺序不能改变,也可以在字段上添加@ExcelProperty(value = {"学生信息","序号"},order = i)
public class MetaTableFieldDomain implements Serializable {

    private static final long serialVersionUID=1L;

   /**
    * 数据元标识符
    */
    //@ExcelProperty(value = {"数据元标识符"},order = 0)
   private String dataidentifier;
   /**
    * 英文编码
    */

   private String englishcode;


   /**
    * 中文名称
    */

   private String chinesename;

   /**
    * 定义
    */

   private String definition;

   /**
    * 字段类型
    */

   private String fieldtype;

   /**
    * 字段说明
    */

   private String fielddescription;

   /**
    * 值域代码
    */

   private String rangcode;

   /**
    * 表名
    */

   private String tablename;



}

3.创建实现AnalysisEventListener的监听器

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.xyhsoft.framework.core.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class ExcelListener extends AnalysisEventListener<MetaTableFieldDomain> {

    private static ExcelListener ExcelListener ;
    private String tablename;
    private List<Integer> integerList = new ArrayList<>();

    @Autowired
    private IMetaTableField iMetaTableFieldManger;

    @PostConstruct
    public void init() {
        ExcelListener = this;
        ExcelListener .iMetaTableFieldManger = this.iMetaTableFieldManger;
}

    public ExcelListen(String tablename) {
        this.tablename = tablename;
    }
    ExcelListener (){}

    // 一行一行读取 excel 内容
    @Override
    public void invoke(MetaTableFieldDomain metaDatabaseBo, AnalysisContext analysisContext) {

        if ("null".equals(tablename)) {
            throw new ServiceException(String.valueOf(UnifyErrorCode.TABLE_NAME_NOT_FOUND));
        }


        Integer integer = null;
//业务
        Integer toCount = ExcelListener .iMetaTableFieldManger.selectByDataidentifierAndEnglishcode(metaDatabaseBo.getDataidentifier(), metaDatabaseBo.getEnglishcode());
        if (toCount != 0) {
            integer = 0;
        } else {
            metaDatabaseBo.setTablename(tablename);
            //保存到数据库
            integer = ExcelListener.iMetaTableFieldManger.save(metaDatabaseBo);
        }
        integerList.add(integer);
    }

    // 读取完成之后
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }

    public Map<String, Integer> getCount() {
        Map<String, Integer> countMap = new HashMap<>();
        int counts = 0;
        for (Integer count : integerList) {
            if (count == 1) {
                counts = counts + 1;
            }
        }
        countMap.put("成功插入条数:", counts);
        countMap.put("插入失败条数:", integerList.size() - counts);
        countMap.put("总条数:", integerList.size());
        return countMap;
    }
}
4.具体的实体类Impl
@Override
    public Map<String, Integer> importExcel(MultipartFile file, String tablename) {

        String filename = file.getOriginalFilename();
        String name = filename.substring(filename.lastIndexOf(".")+1);
        if ("xls".equals(name) || "xlsx".equals(name)){

        }else {
            throw new IllegalArgumentException("文件格式不符上传标准");
        }
        if (file == null) {
            throw new IllegalArgumentException("文件不能为空");
        }
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e) {
            throw new IllegalArgumentException("解析文件异常");
        }
        ExcelListen excelListen = new ExcelListen(tablename);
        EasyExcel.read(inputStream, MetaTableFieldDomain.class, excelListen).sheet().doRead();
        return excelListen.getCount();
    }

5.xls文件内容

 此顺序要是实体类字段顺序对应(字段添加@ExcelProperty除外)

测试即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值