EasyExcel简单使用

前言
EasyExcel是基于Java的开源项目,用于处理大量的Excel数据,相较于传统的Apache POI解决方案,具有更好的性能,特别是处理超大数据量的Excel文件时,可以有效地降低内存消耗。其主要特点包括:

  1. 低内存消耗:内存使用量几乎与文件数量量无关,取决于配置缓存的大小。
  2. 快速读写:通过流式处理Excel文件
  3. 简单易用
  4. 扩展性强

使用方式
1.引入alibaba的依赖

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

2.下载excel模板,通过配置使其成为静态资源

public class ResourcesConfig implements WebMvcConfigurer {
 
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
   
        /** excel模板路径 */
        registry.addResourceHandler("/excel/**")
                .addResourceLocations("classpath:/templates/excel/")
                .setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS).cachePublic());
      
    }

3.导入数据,返回错误列表,并返回错误原因

@PostMapping("/importConsumer")
@ApiOperation(value = "导入客户")
public BaseResponse importConsumer(@RequestPart("file") MultipartFile file, HttpServletResponse response) {
   consumerService.inportConsumer(file, response);
    return BaseResponse.getSuccess();
}
@Data
public class ConsumerDTO {

    /** 姓名 */
    @ExcelProperty(value = "姓名")
    private String name ;
    /** 电话 */
    @ExcelProperty(value = "电话")
    private String tel ;
    /** 地址 */
    @ExcelProperty(value = "地址")
    private String address ;
    /** 错误原因 */
    @ExcelProperty(value = "错误原因")
    private String errorMessage ;
}
 @Override
    @Transactional
    public void inportConsumer(MultipartFile file, HttpServletResponse response) {
        try {
            InputStream inputStream = file.getInputStream();
            List<ConsumerDTO> consumerList = EasyExcel.read(inputStream)
                    .head(ConsumerDTO.class)
                    .sheet("Sheet1")
                    .headRowNumber(1)
                    .doReadSync();
            if (!CollectionUtils.isEmpty(consumerList)) {
                List<ConsumerDTO> errorList = new ArrayList<>();
                // 调用新增接口
                for (ConsumerDTO consumer : consumerList) {
                    try {
                        //  组装数据
                        ConsumerRequest consumerRequest = new ConsumerRequest();
                        BeanUtils.copyProperties(consumer, consumerRequest);
                        //  新增数据
                        insert(consumerRequest);
                    } catch (Exception e) {
                        // 把错误数据加入到错误列表
                        consumer.setErrorMessage(e.getMessage());
                        errorList.add(consumer);
                    }
                }
                // 导出错误列表
                if (errorList.size() > 0) {
                    ServletOutputStream outputStream = response.getOutputStream();
                    response.setCharacterEncoding("UTF-8");
                    response.setHeader("content-Type", "application/octet-stream");
                    String fileName = "导入用户错误列表";
                    // 指定文件如何展示给用户, 希望用户下载而不是直接在浏览器中打开可以使用attachment类型
                    response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
                    EasyExcel.write(outputStream, ConsumerDTO.class).sheet("Sheet1").doWrite(errorList);
                }
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值