首页 > 其他 > 详细

【easyexcel】读取excel文件

时间:2020-06-10 19:15:35      阅读:208      评论:0      收藏:0      [点我收藏+]

 

读取excel文件解析为实体对象列表

例:将如下文件解析为List<Object>

文件内容

技术分享图片

 将该文件内容转换为List<User>

 

User类

继承了BaseRowModel,字段上添加@ExcelProperty注解,属性value表示表头名,index表示列的顺序排序

package com.harara.model;

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

import java.util.Date;

/**
 * @author : harara
 * @version : 2.0
 * @date : 2020/6/9 15:32
 * 继承BaseRowModel
 */
@Data
public class User extends BaseRowModel{

    @ExcelProperty(value = "姓名", index = 0)
    private String name;

    @ExcelProperty(value = "年龄", index = 1)
    private String age;

    @ExcelProperty(value = "邮箱", index = 2)
    private String email;

    @ExcelProperty(value = "地址", index = 3)
    private String address;

    @ExcelProperty(value = "性别", index = 4)
    private String sax;

    @ExcelProperty(value = "高度", index = 5)
    private String heigh;

    @ExcelProperty(value = "备注", index = 6)
    private String last;

    @ExcelProperty(value = "生日",index = 7)
    private Date bitthday;

}

 

监听器

继承AnalysisEventListener

package com.harara.easyexcel.read;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
/**
 * @author : harara
 * @version : 2.0
 * @date : 2020/6/10 9:25
 */
public class ExcelListener extends AnalysisEventListener {


    private List<Object> dataList = new ArrayList<Object>();
    /**
     * 通过AbalysisContext可以获取当前sheet,当前行等数据
     * @param object
     * @param context
     */
    @Override
    public void invoke(Object object, AnalysisContext context) {
        dataList.add(object);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //dosomething
    }


    public List<Object> getDataList(){
        return dataList;
    }
}

 

测试类

读取excel文件解析为实体对象列表

package com.harara.easyexcel.read;

import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.harara.model.User;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


/**
 * @author : harara
 * @version : 2.0
 * @date : 2020/6/10 9:41
 */
public class ExcelReadTest {


    public <T extends BaseRowModel> List<T> read(String filename, Class<T> rowModel) throws Exception{

        ExcelListener excelListener = new ExcelListener();
        ExcelReader excelReader = getExcelReader(new File(filename),excelListener,true);
        if(excelReader == null){
            return new ArrayList();
        }
        for(Sheet sheet:excelReader.getSheets()){
            sheet.setClazz(rowModel);
            excelReader.read(sheet);
        }
        List<T> list = new ArrayList<>();
        for(Object obj:excelListener.getDataList()){
                list.add((T)obj);
        }
        return list;
    }


    /**
     *
     * @param file 文件
     * @param eventListener 用户监听器
     * @return
     */
    public static ExcelReader getExcelReader(File file,
                                             AnalysisEventListener eventListener) throws Exception{
        String fileName  = file.getName();
        if (fileName == null ) {
            throw new Exception("文件格式错误!");
        }
        if (!fileName.toLowerCase().endsWith(ExcelTypeEnum.XLS.getValue()) && !fileName.toLowerCase().endsWith(ExcelTypeEnum.XLSX.getValue())) {
            throw new Exception("文件格式错误!");
        }
        InputStream inputStream = null;
        try{
            inputStream = new FileInputStream(file);
            if (fileName.toLowerCase().endsWith(ExcelTypeEnum.XLS.getValue())) {
                return new ExcelReader(inputStream, ExcelTypeEnum.XLS, null, eventListener, false);
            } else {
                return new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null, eventListener, false);
            }
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }

    }



    public static void main(String[] args) {
        ExcelReadTest excelReadTest = new ExcelReadTest();
        try {
            List<User> users = excelReadTest.read("excelByModel.xlsx", User.class);
            System.out.println(users);
            System.out.println("读取完成");
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

 

【easyexcel】读取excel文件

原文:https://www.cnblogs.com/kiko2014551511/p/13086949.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!