Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试读取excel文件时出现非法状态异常_Java_Excel_Parsing_Apache Poi - Fatal编程技术网

Java 尝试读取excel文件时出现非法状态异常

Java 尝试读取excel文件时出现非法状态异常,java,excel,parsing,apache-poi,Java,Excel,Parsing,Apache Poi,我尝试使用Apache POI库读取excel文件,但出现以下错误: java.lang.IllegalStateException:无法从数字单元格获取文本值 位于org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:845) 位于org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:294) 位于org.apache.

我尝试使用Apache POI库读取excel文件,但出现以下错误:

java.lang.IllegalStateException:无法从数字单元格获取文本值 位于org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:845) 位于org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:294) 位于org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:246) 位于com.ge.aviation.TeamDataProcessor.process(TeamDataProcessor.java:174) 位于com.ge.aviation.BatchCall$1.run(BatchCall.java:30) 位于java.util.TimerThread.mainLoop(Timer.java:555) 在java.util.TimerThread.run(Timer.java:505)

我想将单元格中的数值作为文本值读取。我在excel中的数值是9位数字(如:108010407)

我阅读excel的方式如下:

Cell cell = row.getCell(columnNumber)
cell.setCellType(Cell.CELL_TYPE_STRING);
但是它被读为“1.080100407E8”而不是“108010407”,我使用这个值作为id。要解决我的问题,我应该采取什么样的方法

注意:当我像这样更改单元格类型时,它没有帮助:

Cell cell = row.getCell(columnNumber)
cell.setCellType(Cell.CELL_TYPE_STRING);
我的样本来源

            switch(cell.getCellType()) {
                case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:
                    data = cell.getRichStringCellValue().toString();
                    break;
                case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC:
                    data = Integer.toString((int)cell.getNumericCellValue());
                    break;
            }

javadoc链接:

最好使用DataFormatter而不是Integer.toString,前者将应用于单元格的Excel格式规则