Exception in thread "main" java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:1035) at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:390) at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:342) at com.cd.test.Test1.exportToExcel(Test1.java:68) at com.cd.test.Test1.main(Test1.java:38) 上面的代码报错
时间: 2023-08-05 14:04:55 浏览: 199
这个错误通常是由于在读取 Excel 单元格时,单元格的类型与你代码中的类型不匹配导致的。具体来说,在这个错误中,你的代码试图将一个 NUMERIC 类型的单元格读取为一个 STRING 类型的值,因此抛出了 IllegalStateException 异常。
要解决这个问题,你需要确定单元格的类型,并根据类型使用正确的方法进行读取。比如,如果你的单元格类型为 NUMERIC,你可以通过调用 getNumericCellValue() 方法来获取其对应的数值;如果单元格类型为 STRING,你可以通过调用 getStringCellValue() 方法来获取其对应的字符串值。
在你的代码中,错误发生在 exportToExcel() 方法的第 68 行,这说明你的代码试图将一个 NUMERIC 类型的单元格转换为了 STRING 类型。你需要检查该单元格的类型,并根据类型选择正确的方法进行读取。比如,如果该单元格类型为 NUMERIC,你可以使用以下代码进行读取:
```
} else if (cell.getCellType() == CellType.NUMERIC) {
double numericValue = cell.getNumericCellValue();
rowValues.add(String.valueOf(numericValue));
}
```
如果你无法确定单元格的类型,你可以通过调用 getCellTypeEnum() 方法来获取其对应的类型枚举值,并根据枚举值进行判断和处理。比如,以下代码可以处理多种类型的单元格:
```
if (cell.getCellTypeEnum() == CellType.STRING) {
String stringValue = cell.getStringCellValue();
rowValues.add(stringValue);
} else if (cell.getCellTypeEnum() == CellType.NUMERIC) {
double numericValue = cell.getNumericCellValue();
rowValues.add(String.valueOf(numericValue));
} else if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
boolean booleanValue = cell.getBooleanCellValue();
rowValues.add(String.valueOf(booleanValue));
} else if (cell.getCellTypeEnum() == CellType.BLANK) {
rowValues.add("");
} else {
rowValues.add("N/A");
}
```
总之,你需要根据单元格的类型来选择正确的方法进行读取,这样就可以避免出现类型不匹配的异常。
阅读全文