You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache POI读取Excel单元格类型返回数字而非类型名称的问题

问题分析与解决方案

问题原因

你使用的Apache POI 3.7版本中,getCellType()方法返回的是int类型的枚举值,而非字符串形式的类型名称。这些数值对应Cell类中定义的常量,比如你看到的1对应的是CELL_TYPE_STRING(字符串类型)。

解决方法

方法1:基于现有POI 3.7版本映射类型名称

通过判断返回的int值,手动映射为对应的类型名称,代码示例:

@SuppressWarnings("deprecation")
@PostMapping("/dump-data-from-excel")
ResponseEntity<String> dumpDatafromExcel(@RequestParam("file") MultipartFile multipart) {
    try {
        XSSFWorkbook workbook = new XSSFWorkbook(multipart.getInputStream());
        XSSFSheet sheet = workbook.getSheetAt(0);
        
        if (sheet != null) {
            XSSFRow row = sheet.getRow(0);
            if (row != null) {
                XSSFCell cell = row.getCell(1);
                if (cell != null) {
                    int cellType = cell.getCellType();
                    String typeName;
                    switch (cellType) {
                        case Cell.CELL_TYPE_NUMERIC:
                            typeName = "NUMERIC";
                            break;
                        case Cell.CELL_TYPE_STRING:
                            typeName = "STRING";
                            break;
                        case Cell.CELL_TYPE_FORMULA:
                            typeName = "FORMULA";
                            break;
                        case Cell.CELL_TYPE_BLANK:
                            typeName = "BLANK";
                            break;
                        case Cell.CELL_TYPE_BOOLEAN:
                            typeName = "BOOLEAN";
                            break;
                        case Cell.CELL_TYPE_ERROR:
                            typeName = "ERROR";
                            break;
                        default:
                            typeName = "UNKNOWN";
                    }
                    System.out.println(typeName);
                }
            }
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return ResponseEntity.ok("处理完成");
}

方法2:升级Apache POI版本(推荐)

POI 3.7是2012年的老旧版本,存在诸多Bug和性能问题,且与你使用的Spring Boot 2.7.7兼容性有限。建议升级到稳定的新版本(如5.2.5),新版本中getCellType()返回CellType枚举类型,直接调用name()即可获取类型名称。

升级后的Maven依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.5</version>
</dependency>

修改后的接口代码:

@PostMapping("/dump-data-from-excel")
ResponseEntity<String> dumpDatafromExcel(@RequestParam("file") MultipartFile multipart) {
    try {
        XSSFWorkbook workbook = new XSSFWorkbook(multipart.getInputStream());
        XSSFSheet sheet = workbook.getSheetAt(0);
        
        if (sheet != null) {
            XSSFRow row = sheet.getRow(0);
            if (row != null) {
                XSSFCell cell = row.getCell(1);
                if (cell != null) {
                    System.out.println(cell.getCellType().name()); // 直接输出类型名称
                }
            }
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return ResponseEntity.ok("处理完成");
}

额外提示

代码中getRow(0)和getCell(1)可能返回null(比如Excel的第一行或指定单元格不存在),建议添加非空判断,避免空指针异常。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:54:57