POI读取excel字符串作为数字

时间:2013-12-06 18:20:31

标签: java excel apache-poi

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

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

我从此前的问题中提取了一些提示并修改了代码,但浮动表示仍然保持不变。

我如何正确读取字符串和日期的数据?

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

            }

        }

2 个答案:

答案 0 :(得分:1)

宣传对答案的评论

问题是电话

cell.setCellType(Cell.CELL_TYPE_STRING);

正在做的是要求POI尝试将单元格从当前的任何单元格(例如数字)转换为字符串。尝试执行此操作的转换非常简单,这就是您丢失格式

的原因

如果您只想获取一个包含Excel中显示的Cell Value的String,只需直接调用DataFormatter,它就会尽力而为。使用“细胞类型”只会混淆事物,并且可能会失去格式化

答案 1 :(得分:0)

如果您尝试针对LIBRE OFFICE电子表格执行程序,即使您使用的是dataformatter类,poi也会为您提供1.0作为输出。因为poi不像LIBRE SPREADSHEET那样以与excel相似的方式工作。