1、controller

 @PostMapping("/importExcel")
    public SvResult<AdminBatchImportUploadResultVo> importExcel(@RequestParam("file") MultipartFile file, AdminBaseReqParam req, @RequestParam(value = "productType", defaultValue = "0") Integer productType) {
        return batchImportService.upload(file, productType, req);
    }

 2、解析文件

 private List<BatchImportLineData> parseExcel(MultipartFile file) {
        List<BatchImportLineData> list = new ArrayList<>();
        try {
            EasyExcel.read(file.getInputStream(), BatchImportLineData.class, new ImportExcelListener<BatchImportLineData>(dataList -> {
                list.addAll(dataList);
            }, BATCH_COUNT)).sheet().doRead();
        } catch (DecorateException e) {
            throw e;
        } catch (IOException e) {
            log.error("excel解析异常,", e);
            throw new DecorateException(SvResultEnum.CLIENT_ERROR, "excel解析异常,请检查文件格式");
        }
        return list;
    }

 3、excel解析listner

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.read.listener.PageReadListener;
import com.jd.rcloud.common.enu.SvResultEnum;
import com.jd.rcloud.common.exception.DecorateException;
import lombok.extern.slf4j.Slf4j;

import java.util.List;
import java.util.function.Consumer;

@Slf4j public class ImportExcelListener<T> extends PageReadListener<T> { public ImportExcelListener(Consumer<List<T>> consumer) { super(consumer); } public ImportExcelListener(Consumer<List<T>> consumer, int batchCount) { super(consumer, batchCount); } @Override public void onException(Exception exception, AnalysisContext context) { String errorMsg = String.format("%s, 第%d行解析异常", context.readSheetHolder().getReadSheet().getSheetName(), context.readRowHolder().getRowIndex() + 1); if (exception instanceof ExcelDataConvertException) { ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception; errorMsg = String.format("第%d行,第%d列数据解析异常", excelDataConvertException.getRowIndex() + 1, excelDataConvertException.getColumnIndex() + 1); } else { log.error(errorMsg + ";" + exception.getMessage()); } throw new DecorateException(SvResultEnum.CLIENT_ERROR, errorMsg); } }

 

4、新建一个类

@Data
public class BatchImportLineData {
    @ExcelProperty("商品编码")
    private Long skuId;
    @ExcelProperty("序号")
    private Long index;
}

 5、jar包

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