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

时间:2012-02-24 16:26:05

标签: java excel apache-poi

我正在尝试使用Apache POI读取单元格值excel表。我的一张纸包含百分比类型作为单元格类型。当我使用cell.getNumbericValue()使用POI读取该单元格时,它返回double值。如果单元格包含11.24%,则返回0.1124。 我的问题是,我想从单元格中读取%符号,即我想读取单元格中的确切数据为11.24%。所以,我尝试使用cell.toString(),即使这样它返回的值与上面相同。 任何人都可以建议我,如何摆脱这个问题。 提前致谢 南都

4 个答案:

答案 0 :(得分:8)

您可以通过测试单元格数据格式字符串来检测单元格是否格式化为百分比:

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

这可以让您区分格式化百分比值和普通数值。

答案 1 :(得分:2)

试试这个, String typeCell = cell.getCellStyle()。getDataFormatString(); 它给出了

  • "通用及#34;非格式化细胞的价值,
  • " 0%"百分比格式
  • dd / mm / yy表示日期,取决于区域设置

我设法解析单元格中的所有类型(数字,百分比,日期,文本,货币)我只需要检查它将给我回来的单元格类型的值。 因为HSSFCell.CELL_TYPE_STRING或HSSFCell.CELL_TYPE_NUMERIC我也有很多麻烦:

答案 2 :(得分:1)

11.24%是0.1124,这就是存储在文件中的原因,这就是你要求数值时的结果

POI提供了一个实用程序,用于根据应用于单元格的格式规则格式化数字字符串,即DataFormatter。如果您使用它来格式化单元格,您将获得一个包含单元格内容的字符串,主要如Excel中所示。

答案 3 :(得分:0)

@WeeShetland的答案应该是被接受的答案。

您可以使用{p>代替cell.getCellStyle().getDataFormatString().contains("%")

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

...


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