Java 如何使用poi从excel工作表中检索百分比类型值

Java 如何使用poi从excel工作表中检索百分比类型值,java,excel,apache-poi,Java,Excel,Apache Poi,我正在尝试使用ApachePOI读取单元格值excel表。我的一张工作表包含百分比类型作为单元格类型。当我使用POI和cell.getNumbericValue()读取该单元格时,它会返回双精度值。如果单元格包含11.24%,则返回0.1124。 我的问题是,我想从单元格中读取%符号,也就是说,我想读取单元格中11.24%的精确数据。因此,我使用cell.toString()尝试了它,即使它返回与上面相同的值。 谁能给我建议一下,如何解决这个问题。 提前谢谢 Nandu11.24%是0.1124

我正在尝试使用ApachePOI读取单元格值excel表。我的一张工作表包含百分比类型作为单元格类型。当我使用POI和cell.getNumbericValue()读取该单元格时,它会返回双精度值。如果单元格包含11.24%,则返回0.1124。 我的问题是,我想从单元格中读取%符号,也就是说,我想读取单元格中11.24%的精确数据。因此,我使用cell.toString()尝试了它,即使它返回与上面相同的值。 谁能给我建议一下,如何解决这个问题。 提前谢谢
Nandu11.24%是0.1124,这就是为什么存储在文件中的是0.1124,这就是您请求数值时得到的结果


POI提供了一个实用程序,用于根据应用于单元格的格式规则对数字字符串进行格式化,该规则为。如果您使用它来格式化单元格,您将得到一个字符串,其中包含单元格的内容,大体上如Excel中所示

通过如下测试单元格数据格式字符串,可以检测单元格是否按百分比格式化:

if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    if (cell.getCellStyle().getDataFormatString().contains("%")) {
        // Detect Percent Values 
        Double value = cell.getNumericCellValue() * 100;
        System.out.println("Percent value found = " + value.toString() +"%");
    } else {
        Double value = cell.getNumericCellValue();
        System.out.println("Non percent value found = " + value.toString());
    }
}
这将使您能够区分百分比格式的值和普通数值。

尝试以下方法:

String typeCell =cell.getCellStyle().getDataFormatString(); 
它给出:

  • 非格式化单元格的“常规”值
  • “0%”表示百分比格式
  • 日期为年月日,取决于地区
我设法解析单元格中的所有类型(数字、百分比、日期、文本、货币),我只需检查它将返回哪个单元格类型的值。
因为我在使用
HSSFCell.CELL\u TYPE\u STRING
HSSFCell.CELL\u TYPE\u NUMERIC

时遇到了很多麻烦,@weesetland的答案应该是可以接受的答案

您可以使用

// class level
private static final int PERCENTAGE_FORMAT = BuiltinFormats.getBuiltinFormat("0%");

...


// in some method
if (cell.getCellStyle().getDataFormat() == PERCENTAGE_FORMAT) {
    ...

这就是你将得到的价值。Excel为它提供了一种显示格式,但数据就是您得到的。执行一些检查以了解单元格是否具有特定类型的数据