美文网首页
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