EasyExcel 简单读

EasyExcel 简单读

1.轻描淡写
EasyExcel是一款有阿里开发者开发的快速、简单避免OOM(内存溢出)的java处理Excel工具,简单易上手。阿里出品必为精品

2.使用攻略
作为一种开源工具,你可以点击 https://github.com/alibaba/easyexcel 查看EasyExcel的 github 开源社区的官方教程,提供了EasyExcel的使用方式。
给读者提供一个读excel的Demo,实测有效,😄

3.Demo
3.1 mvn项目可以直接引入easyExcel的pom,非mvn项目可以下载jar包,最新的版本为2.1.6,旧的版本也是可以用的,但有些方法会打上 @Deprecated注释显示过期不推荐使用,但不影响正常使用。
pom包如下:

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

3.2 读excel的内容到内存Demo
3.2.1 先建一个与excel对应的实体类来映射excel中的数据,如下:

@Data
public class UploadExcelDO extends BaseRowModel {
    @ExcelProperty
    private String id;

    @ExcelProperty
    private String name;

    @DateTimeFormat("yyyy/MM/dd HH:mm:ss")
    private Date date;

}

3.2.2 写一个工具类来存放监听器和读excel数据的方法,如下:

public class EasyExcelUtils {

    /**
     * 模型 解析监听器
     */
    public static class ModelExcelListener extends AnalysisEventListener {

        private List<Object> datas = new ArrayList<>();
        @Override
        public void invoke(Object object, AnalysisContext context) {
            datas.add(object);
        }
        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
        }
        public List<Object> getDatas() {
            return datas;
        }
        public void setDatas(List<Object> datas) {
            this.datas = datas;
        }
    }
   
    /**
     * 通过文件名直接读取excel
     * @param filePath
     * @param clazz 映射类 这里指UploadexcelDO.class
     * @param headRowNumber 表头行数
     * @return
     */
    public static List<Object> readExcelFromLocalFilePath(String filePath,Class<? extends BaseRowModel> clazz,int headRowNumber){
       ModelExcelListener listener  = new ModelExcelListener();
       EasyExcel.read(filePath, clazz, listener).sheet().headRowNumber(2).doRead();
       return  listener.getDatas();
    }

    public static List<Object> readExcelFromInputStream(InputStream inputStream,Class<? extends BaseRowModel> clazz, int headRowNumber) throws IOException {
        ModelExcelListener listener  = null;
        try {
            listener = new ModelExcelListener();
            EasyExcel.read(inputStream, clazz, listener).sheet().headRowNumber(headRowNumber).doRead();
        } finally {
            if(inputStream!=null){
                inputStream.close();
            }
        }
        return  listener.getDatas();

    }

    /**
     * 从web上读取excel
     * @param multipartFile
     * @param headRowNumber
     * @return
     * @throws IOException
     */
    public static List<Object> readExcelFromMultipartFile(MultipartFile multipartFile,Class<? extends BaseRowModel> clazz,int headRowNumber) throws IOException {
        InputStream inputStream = multipartFile.getInputStream();
        ModelExcelListener listener = null;
        try {
            listener = new ModelExcelListener();
            EasyExcel.read(inputStream, clazz, listener).sheet().headRowNumber(headRowNumber).doRead();
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
        return listener.getDatas();
    }
    }

3.2.3 写个测试类试一下
下列为从本地文件路径读的Test,工具类也提供了其他方式的读excel的方法,这里不一一例举

@Test
    public void test(){
        String path = "/Users/Desktop/12.xlsx";
        List<Object> dataList = EasyExcelUtil.readExcelFromLocalFilePath(path,UploadExcelDO.class,1);
        System.out.println(dataList);
    }  
 

3.2.4 运行效果
本地excel文件/Users/Desktop/12.xlsx在这里插入图片描述
执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值