按Java格式读取Excel数值单元格值

按Java格式读取Excel数值单元格值,java,excel,apache-poi,Java,Excel,Apache Poi,当我读取excel数值单元格值时,我得到的输出是小数。79的读数是79.0,0.00的读数是0.0。我编写的应用程序代码是: int type = cell.getCellType(); if (type == HSSFCell.CELL_TYPE_NUMERIC) System.out.println(cell.getNumericCellValue()); 我不是100%认为这会起作用,但我相信您正在寻找的是。我假设您使用的是ApachePOI 你应该考虑使用数据格式< /代码> s。

当我读取excel数值单元格值时,我得到的输出是小数。79的读数是79.0,0.00的读数是0.0。我编写的应用程序代码是:

int type = cell.getCellType();
if (type == HSSFCell.CELL_TYPE_NUMERIC)
  System.out.println(cell.getNumericCellValue());

我不是100%认为这会起作用,但我相信您正在寻找的是。

我假设您使用的是ApachePOI

你应该考虑使用<代码>数据格式< /代码> s。是一些非常简单的代码草案

否则,如果工作簿中的数据是一致的,则可能需要将
getNumericCellValue
返回的
double
四舍五入到
int

System.out.println((int)Math.round(cell.getNumericCellValue()));

这个问题在堆栈溢出问题上经常出现,所以建议您仔细查看许多类似的问题,看看有没有答案

Excel将几乎所有文件格式的数字都存储为浮点值,这就是为什么POI会为数字单元格返回一个双精度值,因为这才是真正存在的。如果希望它看起来像Excel中的一样,则需要将针对单元格定义的格式规则应用于数字。因此,您想要做完全相同的事情。引述:

您要做的是使用。您将其传递给一个单元格,它会尽力返回一个字符串,其中包含Excel将为该单元格显示的内容。如果你给它一个字符串单元格,你会得到字符串。如果您将应用了格式规则的数字单元格传递给它,它将根据这些规则对数字进行格式设置,并返回字符串

对于您的情况,我假设数值单元格应用了整数格式规则。如果您要求DataFormatter格式化这些单元格,它将返回一个包含整数字符串的字符串

您需要做的只是:

// Only need one of these
DataFormatter fmt = new DataFormatter();

// Once per cell
String valueAsSeenInExcel = fmt.formatCellValue(cell);

按如下方式使用DataFormatter,它将自动检测单元格的格式并生成字符串输出

                    DataFormatter formatter = new DataFormatter();
                    String df2 = formatter.formatCellValue(cell);

但人们仍然面临着这样的问题:你可以使用这个


单元格也有两个值(例如:100.50)。在尝试了您建议的代码之后,我得到的输出是100,这是不需要的。如果值是79100.50,我应该像在Excel中一样读取它们。请帮帮我。我不想舍入Excel中的任何数值单元格值,我只想按原样读取它们。但读数为79-->79.0、100.50-->100.5。请帮我解决这个问题。好的,你也有实际的双精度值,所以四舍五入不起作用。您是否尝试过检查Apache POI的数据格式?我相信它会指引你走向正确的方向。这里有一些其他的链接让你开始:是的,这个问题真的与POI无关。。。这是关于格式化Java Double的问题。这个问题与POI有关,我正在使用org.apachi.POI读取单元格值。请在本期中帮助我。我想读取Excel中的数值单元格值。但我的代码读取的是79-->79.0、100.50-->100.5。请纠正我哪里做错了,我找不到。帮助我!谢谢,我用DataFormatter得到了所需的解决方案。非常感谢你!!请注意,如果单元格具有公式数据类型,此解决方案将不起作用,公式类型将不会被计算。@userxuser如果您具有公式,则可以使用在格式化之前对单元格进行计算。通过此方法,您可以仅将excel的一列转换为数字,但下一列无法正确显示。它只会带来双重价值。为什么?
NumberToTextConverter.toText(cell.getNumberiCellValue())