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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写爬虫的程序员B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值