使用POI解析Excel

使用POI将excel解析成String[]集合

Public List<String[]> parseExcel(InputStream inputStream, String suffix, int StartRow){
    //1.定义excel对象变量
    Workbook workbook = null;
    //2.判断后缀,决定使用的解析方式,决定如何创建对象
    if("xls".equals(suffix)){
        //excel 2003版
        workbook = new HSSFWorkbook(inputStream);
    }else if("xlsx".equals(suffix)){
        //excel 2007版
        workbook = new XSSFWorkbook(inputStream);
    }else{
        //未知内容
        return null;
    }

    //获取工作表,excel分为若干个表(sheet)
    Sheet sheet = workbook.getSheetAt(0);
    if(sheet==null){
        return null;
    }
    //获取表格中最后一行的行号
    int lastRowNum = sheet.getLastRowNum();
    //最后一行的行号大于startRow,startRow从0开始数,而excel是从1开始数的
    if(lastRowNum <= startRow){
        return null;
    }

    //行和单元格
    Row row = null;
    Cell cell = null;
    List<String[]> result = new ArrayList<String[]>();
    //循环读取
    for(int rowNum = startRow ; rowNum <= lastRowNum ; rowNum ++){
        row = sheet.getRow(rowNum);
        //获取当前行的第一列和最后一列的标记
        Short firstCellNum = row.getFirstCellNum();
        Short lastCellNum = row.getLastCellNum();
        if(lastCellNum != 0){
            String[] rowArray = new String[lastCellNum];
            for(int cellNum = firstCellNum ; cellNum <= lastCellNum ; cellNum++){
                cell = row.getCell(cellNum);
                //判断单元格是否有数据    
                if(cell==null){
                    rowArray[cellNum] = null;   
                }else{
                    rowArray[cellNum] = parseCell(cell);    
                }
            }
        result.add(rowArray);
        }
    }
    return result;
}

//解析单元格
private String parseCell(Cell cell){
    String cellStr = null;
    //判断单元格类型
    switch(cell.getCellType()){
        case HSSFCell.CELL_TYPE_STRING:
            //字符串类型单元格
            cellStr = cell.getRichStringCellValue().toString();
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            //空数据
            cellStr = "";
        case HSSFCell.CELL_TYPE_NUMBERIC:
            //数学类型(包含日期,时间,数字)
            //判断日期类型[年月日 2018-9-4 | 时分 22:28]
            if(HSSFDateUtil.isCellDateFormatted(cell)){
                //判断具体类型是日期还是时间
                simpleDateFormat sdf = null;
                if(cell.getCellType()==HSSFDateFormat.getBuiltinFormat("h:mm")){
                    //时间
                    sdf = new simpleDateFormat("HH:mm");    
                }else{
                    //日期
                    sdf = new simpleDateFormat("yyyy-MM-dd");
                }
                Date temp = cell.getDateCellValue();
                cellStr = sdf.format(temp);
            }else{
                //数字
                Double temp = cell.getNumericCellValue();
                //数学格式化工具
                DecimalFormat format = new DecimalFormat();
                //查看单元格中具体样式类型
                String formatStr = cell.getCellStyle().getDateFormatString();
                if(formatStr.equals("General")){
                    //定义单元格格式化正则,使用具体有效的数据,且只保留有效数据
                    format.applyPattern("#");
                    //format.applyPattern("#.##"); 保留2位小数
                }   
                cellStr = format.format(temp);
            }
        break;
        default:
            cellStr = "";
    }
    return cellStr;
}

你可能感兴趣的:(解析Excel)