EasyExcel通用导入组件

easyExcel官网:读Excel | Easy Excel

本文的前提是了解easyExcel的基本使用,如果不了解可以去官网,官方文档可以帮助你快速入门

众所周知,easyExcel在继承或实现组件类时,是规定了泛型的,如此就代表一个监听器也许对应的是一个实体类。

但要是想所有类都是用一个方法来导入呢,就需要将泛型抹掉。

将AnalysisEventListener的泛型抹掉,使用Object类型的list来缓存数据

注:这里只是最简单的实现,可以参考官方文档中每100行存一次数据库,不然excel文件过大的情况下容易导致OOM

 示例数据

 

 实体类:DemoData.java

@Getter
@Setter
@EqualsAndHashCode
public class DemoData {
    @ExcelProperty("字符串标题")
    private String string;

    @ExcelProperty("日期标题")
    private Date date;

    @ExcelProperty("数字标题")
    private Double doubleData;
}

监听器:CommonExcelListener.java 

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
@Getter
public class CommonExcelListener extends AnalysisEventListener {
    //缓存解析后的数据
    List<Object> dataList = ListUtils.newArrayList();

    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        //当前读取的excel行数,加1是为了对其文件的行数
        Integer rowIndex = analysisContext.readRowHolder().getRowIndex() + 1;
        //将数据添加到缓存list中
        dataList.add(o);
        log.info("解析第{}行数据: %{}", rowIndex, JSON.toJSONString(o));
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        log.info("所有数据解析完成!");
    }
}

读取Excel数据的代码如下

public interface ExcelService {

    public List<?> readExcel(MultipartFile mFile, Class<?> clazz);
}
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.util.StringUtils;
import com.mjh.entity.dto.ExcelAnalyzeResDTO;
import com.mjh.service.ExcelCheck;
import com.mjh.service.ExcelService;
import com.mjh.util.CommonExcelListener;
import com.mjh.util.ExcelListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@Service
@Slf4j
public class ExcelServiceImpl implements ExcelService {

    @Override
    public List<?> readExcel(MultipartFile mFile, Class<?> clazz, ExcelCheck check) {
        if (mFile != null && !mFile.isEmpty()) {
            try {
                //获取文件流
                InputStream inputStream = mFile.getInputStream();
                CommonExcelListener readListener = new CommonExcelListener();
                //读取数据
                EasyExcel.read(inputStream, clazz, readListener).sheet().doRead();
                //取出数据
                List<Object> dataList = readListener.getDataList();

                return dataList;
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return ListUtils.newArrayList();
    }
}

使用

@RestController
@Slf4j
public class ExcelController {

    @Resource
    private ExcelService excelService;

    @RequestMapping("/excel")
    public String excel(MultipartFile mFile) {
        List<DemoData> objects = (List<DemoData>) excelService.readExcel(mFile, DemoData.class);
        return "success";
    }

}

参考:后端思想-如何设计一个操作和管理Excel的业务模块 - 掘金 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于EasyExcel导入通用的方法,您可以按照以下步骤进行操作: 1. 首先,您需要导入EasyExcel的相关库文件。您可以使用Maven或Gradle来管理依赖,确保在项目中引入了EasyExcel的库文件。 2. 在您的代码中,创建一个ExcelReader对象,并指定要读取的Excel文件的路径或输入流。例如: ``` ExcelReader excelReader = EasyExcel.read("路径/文件名.xlsx").build(); ``` 3. 创建一个实现了AnalysisEventListener接口的监听器类,用于处理读取到的每一行数据。例如: ```java public class ExcelListener extends AnalysisEventListener<Object> { // 重写父类方法,处理每一行数据 @Override public void invoke(Object data, AnalysisContext context) { System.out.println("读取到数据:" + data); // 您可以在这里对读取到的数据进行进一步处理 } // 重写父类方法,读取完成后的操作 @Override public void doAfterAllAnalysed(AnalysisContext context) { System.out.println("读取完成!"); } } ``` 4. 使用ExcelReader对象注册监听器,并调用read()方法开始读取Excel文件。例如: ```java excelReader.read(new Sheet(1, 1, YourDataClass.class), new ExcelListener()); ``` 这里的`YourDataClass`是您自定义的数据类,用于存储读取到的每一行数据。 5. 最后,记得关闭ExcelReader对象,释放资源。例如: ```java excelReader.finish(); ``` 这是一个基本的EasyExcel导入通用的步骤,您可以根据具体需求进行进一步的处理和操作。希望对您有所帮助!如有其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值