使用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
相关产品推荐
相关产品推荐

