使用CellType.STRING等单元格类型分支判断失效且报错,求解决方案
问题解决:POI单元格类型分支判断失效
你遇到的问题是因为混用了POI不同版本的单元格类型判断方式,导致分支逻辑无法正常工作,单独使用CellType.STRING报错也是同样原因。
核心原因
POI在3.15版本后弃用了Cell.CELL_TYPE_*这类int常量,改用CellType枚举类来定义单元格类型,新旧写法混用会导致类型不匹配,触发错误。
解决方案
统一使用对应版本的判断方式
如果你的POI版本是3.15及以上:
直接使用CellType枚举,写法如下:Cell cell = row.getCell(yourCellIndex); if (cell != null) { switch (cell.getCellType()) { case STRING: // 处理字符串单元格逻辑 break; case NUMERIC: // 处理数值单元格逻辑 break; case BLANK: // 处理空白单元格逻辑 break; // 其他类型按需添加 default: break; } }注:POI 4.x及以上版本中
getCellType()直接返回CellType枚举;3.15版本可以用getCellTypeEnum()获取枚举,getCellType()仍返回int类型(兼容旧版),建议优先用枚举方式。如果你的POI版本是3.14及更早:
只能使用旧版的int常量写法:Cell cell = row.getCell(yourCellIndex); if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: // 处理字符串单元格逻辑 break; case Cell.CELL_TYPE_NUMERIC: // 处理数值单元格逻辑 break; case Cell.CELL_TYPE_BLANK: // 处理空白单元格逻辑 break; // 其他类型按需添加 default: break; } }
排查导入包问题
单独使用CellType.STRING报错时,检查是否导入了正确的包:import org.apache.poi.ss.usermodel.CellType;避免导入其他无关包下的
CellType类。
内容的提问来源于stack exchange,提问作者Shaik Yousuf Baba
相关产品推荐
相关产品推荐

