zoukankan      html  css  js  c++  java
  • 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";
    }
  • 相关阅读:
    Oracle
    Oracle入门
    数据库测试的测试点
    overload重载与override重写的区别
    Java接口的default关键字用法解释
    pytest执行入口
    Gradle的安装与基本配置
    玩转HTML5+跨平台开发[5] HTML表单标签
    玩转HTML5+跨平台开发[4] HTML表格标签
    玩转HTML5+跨平台开发[3] HTML列表标签
  • 原文地址:https://www.cnblogs.com/bbllw/p/11122357.html
Copyright © 2011-2022 走看看