POI阅读excelstring作为数字

我正在使用Apache POI来读取excel文件。 而在阅读时,我注意到它将string作为浮点值。

如果我的单元格包含1,那么它将获取它为1.0

我从这里提出了一些关于以前的问题的提示,并修改了代码,但是仍然保持浮动表示。

如何正确读取string和date的数据?

DataFormatter df = new DataFormatter(); for (Row row : sheet) { for(int cn=0; cn<row.getLastCellNum(); cn++) { // If the cell is missing from the file, generate a blank one // (Works by specifying a MissingCellPolicy) Cell cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK); // Print the cell for debugging cell.setCellType(Cell.CELL_TYPE_STRING); System.out.println("CELL: " + cn + " --> " + df.formatCellValue(cell)); if (row.getRowNum() == 0) { sheetColumnNames.add(cell.getRichStringCellValue().getString()); } } } 

提出评论以答复

问题在于电话

 cell.setCellType(Cell.CELL_TYPE_STRING); 

这样做是要求POI尝试将当前的单元格(例如数字)转换为string。 应用的转换尝试做到这一点相当简单,这就是为什么你失去了格式

如果你只是想返回一个包含单元格值的string,如Excel中所示,直接调用DataFormatter ,它会尽力而为。 玩单元格types只会混淆事物,并且会冒失去格式的风险

除了上面的答案之外,即使你正在使用dataformatter类,如果你正在试图针对LIBRE OFFICE电子表格执行程序,poi也会给你1.0的输出。 由于poi不像LIBRE SPREADSHEETS那样与excel类似。