报错如下:

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());
                        }
                    }

 

posted on 2022-05-30 09:42  周文豪  阅读(1029)  评论(0编辑  收藏  举报