EasyExcel实现批量导入

EasyExcel代码及官方文档:https://github.com/alibaba/easyexcel

最近项目中遇到需要Excel导入数据的情况,由于几十万条的数据量过大,再加上逻辑处理比较多,最初采用poi导入,占用资源过大,导入过程中服务器内存几乎100%占用,耗时较久,因此更换为EasyExcel。实测效果确实立竿见影,效率至少提升一倍,在这里把代码贴上,不足之处欢迎指正。

1导入jar包

先到mvn上搜索依赖包,引入pom中,下面是最新的

		<!--easyexcel-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>1.1.2-beat1</version>
        </dependency>

2创建模型

实际使用中,我认为创建模型时相对快捷而且不容易出错的方式,可以通过String类型接收数据后,自己再转换类型,防止类型转换错误。


import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Tolerate;

import java.io.Serializable;

@Data
@Builder
public class JmmImport extends BaseRowModel implements Serializable {

    @Tolerate
    public JmmImport(){}

    /**
     * 门店编码
     */
    @ExcelProperty(value ="门店编码",index = 0)
    private String storeCode;
    /**
     * 商品编码
     */
    @ExcelProperty(value ="商品编码",index = 1)
    private String goodsCode;

    /**
     * 商品名称
     */
    @ExcelProperty(value ="商品名称",index = 2)
    private String goodsName;
    /**
     * 商品品类code
     */
    @ExcelProperty(value ="商品品类code",index = 3)
    private String goodsClassCode;
    /**
     * 商品属性code
     */
    @ExcelProperty(value ="商品属性code",index = 4)
    private String goodsAttrCode;
    /**
     * 档期起始时间
     */
    @ExcelProperty(value ="档期起始时间",index = 5)
    private String beginTime;
    /**
     * 档期结束时间
     */
    @ExcelProperty(value ="档期结束时间",index = 6)
    private String overTime;
}

3正式导入

List<Object>  objs = EasyExcelFactory.read(multipartFile.getInputStream(), new com.alibaba.excel.metadata.Sheet(1, 1,JmmImport.class));
        List<JmmDetailSold> excelList = Lists.newArrayList();
        for (Object o : objs) {
            if (o instanceof JmmImport) {
                JmmDetailSold excel = JmmDetailSold.builder()
                        .storeCode(((JmmImport) o).getStoreCode())
                        .goodsCode(((JmmImport) o).getGoodsCode())
                        .goodsName(((JmmImport) o).getGoodsName())
                        .goodsClassCode(((JmmImport) o).getGoodsClassCode())
                        .goodsAttrCode(((JmmImport) o).getGoodsAttrCode())
                        .beginTime(Timestamp.valueOf(((JmmImport) o).getBeginTime()))
                        .overTime(Timestamp.valueOf(((JmmImport) o).getOverTime()))
                        .build();
                excelList.add(excel);
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值