EasyExcel实现导入excel

Posted bbllw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyExcel实现导入excel相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/rexueqingchun/article/details/91870372

1.pom.xml配置依赖包

<!-- xls格式excel依赖包 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<!--xlsx格式excel依赖包-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
<!-- easyexcel依赖包 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>1.1.2-beat1</version>
</dependency>

2.编写excel导入对应实体类

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
 
public class TestModel extends BaseRowModel 
 
    @ExcelProperty(value = "姓名", index = 0)
    private String xm;
    @ExcelProperty(value = "微信号", index = 1)
    private String wxh;
    @ExcelProperty(value = "手机号", index = 2)
    private String sjh;
    
    public String getXm() 
        return xm;
    
    public void setXm(String xm) 
        this.xm = xm;
    
    public String getWxh() 
        return wxh;
    
    public void setWxh(String wxh) 
        this.wxh = wxh;
    
    public String getSjh() 
        return sjh;
    
    public void setSjh(String sjh) 
        this.sjh = sjh;
    
    

3.编写导入监听类

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
 
public class ExcelListener extends AnalysisEventListener 
 
    //自定义用于暂时存储data
    //private List<Object> datas = Collections.synchronizedList(new ArrayList<>());
    private List<Object> datas = new ArrayList<>();
    
    /**
     * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据
     */
    @Override
    public void invoke(Object o, AnalysisContext analysisContext) 
        datas.add(o);
    
 
    /**
     * 读取完之后的操作
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) 
        
    
 
    public List<Object> getDatas() 
        return datas;
    
 
    public void setDatas(List<Object> datas) 
        this.datas = datas;
    

 

4.编写导入工具类

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
 
import org.springframework.web.multipart.MultipartFile;
 
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
 
public class EasyExcelUtil 
    
    /**
     * 读取某个 sheet 的 Excel
     *
     * @param excel    文件
     * @param rowModel 实体类映射,继承 BaseRowModel 类
     * @param sheetNo  sheet 的序号 从1开始
     * @return Excel 数据 list
     */
    public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel) throws IOException 
        return readExcel(excel, rowModel, 1, 1);
    
 
    /**
     * 读取某个 sheet 的 Excel
     * @param excel       文件
     * @param rowModel    实体类映射,继承 BaseRowModel 类
     * @param sheetNo     sheet 的序号 从1开始
     * @param headLineNum 表头行数,默认为1
     * @return Excel 数据 list
     */
    public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel, int sheetNo, int headLineNum) throws IOException 
        ExcelListener excelListener = new ExcelListener();
        ExcelReader reader = getReader(excel, excelListener);
        if (reader == null) 
            return null;
        
        reader.read(new Sheet(sheetNo, headLineNum, rowModel.getClass()));
        return excelListener.getDatas();
    
    
    /**
     * 读取指定sheetName的Excel(多个 sheet)
     * @param excel    文件
     * @param rowModel 实体类映射,继承 BaseRowModel 类
     * @return Excel 数据 list
     * @throws IOException 
     */
    public static List<Object> readExcel(MultipartFile excel, BaseRowModel rowModel,String sheetName) throws IOException 
        ExcelListener excelListener = new ExcelListener();
        ExcelReader reader = getReader(excel, excelListener);
        if (reader == null) 
            return null;
        
        for (Sheet sheet : reader.getSheets()) 
            if (rowModel != null) 
                sheet.setClazz(rowModel.getClass());
            
            //读取指定名称的sheet
            if(sheet.getSheetName().contains(sheetName))
                reader.read(sheet);
                break;
            
        
        return excelListener.getDatas();
    
 
    /**
     * 返回 ExcelReader
     * @param excel 需要解析的 Excel 文件
     * @param excelListener new ExcelListener()
     * @throws IOException 
     */
    private static ExcelReader getReader(MultipartFile excel,ExcelListener excelListener) throws IOException 
        String filename = excel.getOriginalFilename();
        if(filename != null && (filename.toLowerCase().endsWith(".xls") || filename.toLowerCase().endsWith(".xlsx")))
            InputStream is = new BufferedInputStream(excel.getInputStream());
            return new ExcelReader(is, null, excelListener, false);
        else
            return null;
        
    
    

5.业务层调用

//导入excel
@RequestMapping(value = "excelImport", method = RequestMethod.GET, RequestMethod.POST )
public String excelImport(HttpServletRequest request,Model model,@RequestParam("uploadFile") MultipartFile[] files) throws Exception         
    if(files != null && files.length > 0)
    MultipartFile file = files[0];
        List<Object> list = EasyExcelUtil.readExcel(file, new TestModel(),1,1);
        if(list != null && list.size() > 0)
            for(Object o : list)
            TestModel xfxx = (TestModel) o;
            System.out.println(xfxx.getXm()+"/"+xfxx.getSjh()+"/"+xfxx.getSjh());
            
        
        
    return "index";

 

以上是关于EasyExcel实现导入excel的主要内容,如果未能解决你的问题,请参考以下文章

easyexcel导入对象与表头不一致时

EasyExcel实现导入excel

基于EasyExcel实现百万级数据导入导出

Spring Boot - 集成 EasyExcel 实现数据导入导出功能

Java:SpringBoot使用EasyExcel实现Excel文件的导出下载和上传导入功能

SpringBoot基于EasyExcel解析Excel实现文件导出导入读取写入