美文网首页
POI Excel 导入

POI Excel 导入

作者: 狐狸老妖婆 | 来源:发表于2019-03-22 10:16 被阅读0次
    /**
         * 读取Excel表格内容
         * @param 
         * @return 数据 List<Map<行号, HashMap<列名, 值>>>
         */
        @SuppressWarnings("resource")
        public static Json getExcelData(MultipartFile file) {
            Json json = Json.newSuccess();
            if(file == null || file.isEmpty()) {
                json.setS(false);
                json.setMsg("文件不存在!");
                return json;
            }
                    
            Workbook wbs = null;//工作簿对象
            try{
                InputStream iStream = file.getInputStream();
                String fileName = file.getOriginalFilename();
                if(fileName.endsWith(XLS)){
                    //2003
                    wbs = new HSSFWorkbook(iStream);
                }else if(fileName.endsWith(XLSX)){
                    //2007
                    wbs = new XSSFWorkbook(iStream);
                }
            }catch(IOException e){
                logger.error("读取excel文件错误");
                json.setS(false);
                json.setMsg("读取excel文件错误");
                return json;
            }
            if(wbs != null) {
                List<Map<Integer, HashMap<String, Serializable>>> sheetDataList = new ArrayList<Map<Integer, HashMap<String, Serializable>>>();
                
                if(wbs.getNumberOfSheets() == 0){
                    logger.error("上传excel文件不存在工作表");
                    json.setS(false);
                    json.setMsg("上传excel文件不存在工作表");
                    return json;
                }
                //依次遍历每个sheet的数据
                for(int sheetNum=0; sheetNum < wbs.getNumberOfSheets(); sheetNum++){
                    Sheet sheet = wbs.getSheetAt(sheetNum);
                    if(sheet != null){
                        int rowCnt = sheet.getLastRowNum();//总行数(第一行是字段描述、第二行是字段名、第三行开始字段值)                 
                        //总行数小于2行(排除空数据)继续读下一张sheet数据
                        if(rowCnt < 2){//取值0、1
                            continue;
                        }
                        // 存放excel数据Map<行号, HashMap<列名, 值>>
                        Map<Integer, HashMap<String, Serializable >> sheetData = new HashMap<Integer, HashMap<String, Serializable>>();
                        //逐行获取Excel列数据
                        HashMap<String, Serializable> cellValueMap = new HashMap<String, Serializable>();
                        for(int rowNum = 2; rowNum <= rowCnt; rowNum++){//第三行开始读取数据
                            Row rowData = sheet.getRow(rowNum);
                            if(rowData==null){//剔除空行
                                continue;
                            }
                            //读取每行的每列数据
                            for(int cellNum = 0; cellNum <= rowData.getLastCellNum(); cellNum++){
                                String cellDesc =  sheet.getRow(0).getCell(cellNum).getStringCellValue();//字段描述
                                String cellName =  sheet.getRow(1).getCell(cellNum).getStringCellValue();//字段名
                                String cellValue = rowData.getCell(cellNum) ==  null ? "":rowData.getCell(cellNum).getStringCellValue().trim();//字段值
                                cellValueMap.put(cellName, cellValue);
                            }
                            sheetData.put(rowNum, cellValueMap);//sheet每一行
                        }
                        sheetDataList.add(sheetData);//每一个sheet
                    }
                }
                json.setObj(sheetDataList);
            }
            
            return json;
        }
    

    其中Json

    private static String DEFAULT_SUCCESS_MSG = "操作成功";
        private static String DEFAULT_FAIL_MSG = "操作失败";
        
        //是否成功
        private boolean s;
        //错误码
        private String errCode;
        //错误描述
        private String msg;
        //附加对象
        private Object obj;
    

    相关文章

      网友评论

          本文标题:POI Excel 导入

          本文链接:https://www.haomeiwen.com/subject/efflvqtx.html