POI对Excel的读取操作

//前端excel只需要直接提交form表单即可
public AjaxResult excelAdd(@RequestPart("file") MultipartFile file) throws Exception {
    if (file.isEmpty()) {
        return AjaxResult.error("没有发现文件");
    }
    if (StringUtils.isNotBlank(file.getOriginalFilename())) {
        String filename = file.getOriginalFilename();
        //excel2003
        if (filename.split("\\.")[1].equals("xls")) {
            //POI导入文件,存放到list集合
            HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
            //意思是有几个文件,一个excel可能有多个sheet,这里只读取第一个
            int sheets = workbook.getNumberOfSheets();
            //只读取第一个sheet
            HSSFSheet sheetAt = workbook.getSheetAt(0);
            //这个表示当前sheet有多少行数据,一行一行读取就行
            int rows = sheetAt.getPhysicalNumberOfRows();
            for (int i = 0; i < rows; i++) {
                //某一行的数据,是一行一行的读取
                HSSFRow row = sheetAt.getRow(i);
                String value = getCellValue(row.getCell(0));
                System.out.println(value);
            }
        }
        if (filename.split("\\.")[1].equals("xlsx")) {
            XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
            //意思是有几个文件,一个excel可能有多个sheet,这里只读取第一个
            int sheets = workbook.getNumberOfSheets();
            //只读取第一个sheet
            XSSFSheet sheetAt = workbook.getSheetAt(0);
            //这个表示当前sheet有多少行数据,一行一行读取就行,但是会把没有数据的行读出来,需要加异常处理
            int rows = sheetAt.getPhysicalNumberOfRows();
            for (int i = 0; i < rows; i++) {
                //某一行的数据,是一行一行的读取
                XSSFRow row = sheetAt.getRow(i);
                String value = getCellValue(row.getCell(0));
                if (StringUtils.isNotBlank(value)){
                    System.out.println(value);
                }
            }
        }
    }
    return AjaxResult.success();
}

public static String getCellValue(Cell cell) {
    String cellValue = "";
    // 以下是判断数据的类型
    switch (cell.getCellTypeEnum()) {
        case NUMERIC: // 数字
            if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                cellValue = sdf.format(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(cell.getNumericCellValue())).toString();
            } else {
                DataFormatter dataFormatter = new DataFormatter();
                cellValue = dataFormatter.formatCellValue(cell);
            }
            break;
        case STRING: // 字符串
            cellValue = cell.getStringCellValue();
            break;
        case BOOLEAN: // Boolean
            cellValue = cell.getBooleanCellValue() + "";
            break;
        case FORMULA: // 公式
            cellValue = cell.getCellFormula() + "";
            break;
        case BLANK: // 空值
            cellValue = "";
            break;
        case ERROR: // 故障
            cellValue = "非法字符";
            break;
        default:
            cellValue = "未知类型";
            break;
    }
    return cellValue;
}

 

你可能感兴趣的:(poi,excel)