报错如下:
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:1050) at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:404) at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:70) at com.jawasoft.testDemo.ExcelUtil.readExcel(ExcelUtil.java:81) at com.jawasoft.testDemo.ExcelUtil.readExcelToObj(ExcelUtil.java:46) at com.jawasoft.testDemo.ExcelUtil.main(ExcelUtil.java:29)
报错原因:在读取cell单元格字符串时,有number类型的数据,因此需要把它转化为纯String类型,这样就不会报错了。
报错的代码:
returnStr = cell.getRichStringCellValue().getString();
或者如下代码
//获取单元格数据 String cellValue = cell.getStringCellValue();
解决办法:在读取excel单元格数据转化之前设置单元格类型为String
代码如下:
//设置单元格类型
cell.setCellType(CellType.STRING);
returnStr = cell.getRichStringCellValue().getString();
或者
在读取单元格数据之前,可以先检查该单元格的数据类型。如果它是数字类型,那么你应该读取它的数值值;如果它是文本类型,那么你应该读取它的字符串值。这样可以避免数据类型不匹配的问题。
Double deliverCarCount = null; Cell cell8 = row.getCell(8); if(null != cell8){ if(cell8.getCellType() == CellType.NUMERIC.getCode()){ deliverCarCount = cell8.getNumericCellValue();// 处理数字值 } else if(cell8.getCellType() == CellType.STRING.getCode()){ deliverCarCount = Double.valueOf(cell8.getStringCellValue()); } }