导入Excel文件出现异常
Cannot get a STRING value from a NUMERIC cell
报错代码
String value = row.getCell(column).getStringCellValue();
Excel依赖
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>4.1.2version>
dependency>
适用于POI 5.0以前,5.0版本后setCellType方法会被废弃。
Cell value = row.getCell(column);
if (StringUtils.isNotNull(value)) {
value.setCellType(CellType.STRING);
System.out.println(value.getStringCellValue());
}
用于多种类型处理
先判断单元格类型,在根据类型获取值,这样就万无一失了
Cell cell = row.getCell(column);
if (StringUtils.isNotNull(cell))
{
if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA)
{
val = cell.getNumericCellValue();
if (DateUtil.isCellDateFormatted(cell))
{
// POI Excel 日期格式转换
val = DateUtil.getJavaDate((Double) val);
}
else
{
if ((Double) val % 1 != 0)
{
val = new BigDecimal(val.toString());
}
else
{
val = new DecimalFormat("0").format(val);
}
}
}
else if (cell.getCellType() == CellType.STRING)
{
val = cell.getStringCellValue();
}
else if (cell.getCellType() == CellType.BOOLEAN)
{
val = cell.getBooleanCellValue();
}
else if (cell.getCellType() == CellType.ERROR)
{
val = cell.getErrorCellValue();
}
}
报错源码信息提示:
Cannot get a STRING value from a NUMERIC cell
org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:1035)
org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:390)
org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:342)
相关源码
/**
* Used to help format error messages
*/
private static RuntimeException typeMismatch(CellType expectedType, CellType actualType, boolean isFormulaCell) {
String msg = "Cannot get a " + expectedType + " value from a " + actualType+ " " + (isFormulaCell ? "formula " : "") + "cell";
return new IllegalStateException(msg);
}
@Deprecated
@Removal(version = "5.0")
void setCellType(CellType cellType);

Cell类的这三个实现有什么区别呢
HSSF:适用于Excel97-2003版本,07版本之前默认扩展名为.xls。
XSSF:适用于Excel2007及之后的版本,默认扩展名为.xlsx,向下兼容。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低内存占用的操作方式,扩展名为.xlsx。
XLSX格式的占用空间比XLS的小。XLSX是用新的基于XML的压缩文件格式取代了XLS默认文件格式。
台下人走过 不见旧颜色 台上人唱着 心碎离别歌
