Java 将excel字符串读取为数字的POI

Java 将excel字符串读取为数字的POI,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用ApachePOI读取excel文件。在阅读时,我注意到它将字符串作为浮点值 如果我的单元格包含1,则它将作为1.0获取它 我从前面的问题中得到了一些提示,并修改了代码,但浮点表示仍然保持原样 如何正确读取字符串和日期的数据 DataFormatter df = new DataFormatter(); for (Row row : sheet) { for(int cn=0; cn<row.getLastCellNum(); cn++

我正在使用ApachePOI读取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());
                    }

            }

        }
DataFormatter df=newdataformatter();
用于(行:页){

对于(int cn=0;cn将评论升级为答案

问题在于电话

cell.setCellType(Cell.CELL_TYPE_STRING);
这样做是要求POI尝试将单元格从当前的任何内容(例如数字)转换为字符串。用于尝试这样做的转换相当简单,这就是为什么您会丢失格式


如果您只想返回一个包含Excel中显示的单元格值的字符串,只需直接调用
DataFormatter
,它就会发挥最大的作用。摆弄单元格类型只会让事情变得混乱,并有可能失去格式设置

添加到上述答案中,即使使用dataformatt,poi也会给您1.0作为输出er类,如果您试图对LIBRE OFFICE电子表格执行程序。因为poi与LIBRE电子表格的工作方式不同,与excel的工作方式不同。

代码似乎正确…似乎是df.formatCellValue(cell))
是罪魁祸首…请对打印语句进行注释,然后再次检查。我认为问题在于
cell.setCellType(cell.cell\u TYPE\u字符串)
不应该在那里。当您点击
setCellType
行时,
数据格式化程序是否正确?删除了setter。它工作正常。ThanksApache POI不适用于LibreOffice电子表格,使用需要使用来使用OpenOffice和LibreOffice生成的ODF电子表格。Apache POI适用于
.xls
.xlsx
仅Excel文件格式我们如何知道传入的xls或xlsx文件是在poi的Excel或libre office中创建的?如果文件是
.xls
.xlsx
格式,那么它就不是LibreOffice格式!LibreOffice和OpenOffice使用
.ods
(打开文档电子表格)格式为其本机电子表格格式