【问题标题】:Read currency & % using Java使用 Java 读取货币和百分比
【发布时间】:2015-10-27 12:16:39
【问题描述】:

我正在尝试使用 Apache Poi (v3.11 / XSSFWorkbook) 读取 excel 文件。我正在阅读一张特定的表格 {e.x. sheet(0)} 由来自同一文件的大约 15 张不同的宏组成。问题是我能够读取非格式化字符串数据,但无法读取货币或 % 等格式化数据。

反正我不控制 Excel 工作表。我将从网络共享路径读取文件。

XSSFWorkbook myWorkBook = null
    XSSFSheet mySheet = null;
    Row rowHeader = null;
    Row rowData = null;
    FileInputStream fis = new FileInputStream(
            new File(
                    "inputfile.xlsx"));
    myWorkBook = new XSSFWorkbook(fis);
    mySheet = myWorkBook.getSheetAt(0);
    rowHeader = mySheet.getRow(0);
    rowData = mySheet.getRow(1);



        for (Cell s : rowHeader) {  
                System.out.print("|  "+s.getStringCellValue());
                System.out.println(" -->"+getCellValue(myWorkBook,rowData.getCell(s.getColumnIndex())));
    }

    myWorkBook.close();
}
//   $#,##0.00

private static String getCellValue(XSSFWorkbook wb, Cell cell)
{
   XSSFCell x = (XSSFCell)cell;
   return x.getRawValue();
}
}

我有一个如下所示的 Excel 表格

Name    Amount    Rate
Name1   $1,500  75%

如果我使用此代码阅读上述表格

名称 --> 名称1

金额 --> 1500(注意缺少的 $ 和 , )

比率 --> 74.99999998(数字不准确且缺少 % 符号)

【问题讨论】:

  • 考虑使用BigDecimal 来存储您的货币值。
  • 你需要$符号,%带值吗。
  • 宏生成 $ & %。如果我用 Ms-excel 打开工作表,我可以看到这些值。是的,我确实需要 $ & %。目标是获取单元格中准确显示的单元格值。
  • 不,我的意思。我们阅读了这些价值观。您只需要这些值或使用符号
  • 如果你使用DataFormatter to render the cell to a String会发生什么?

标签: java excel apache-poi


【解决方案1】:

感谢@Gagravarr

下面的代码解决了这个问题

private static String getCellValue(XSSFWorkbook wb, Cell cell)
{
  DataFormatter formatter = new DataFormatter();
  String formattedCellValue = formatter.formatCellValue(cell);
  return formattedCellValue; 
}

【讨论】:

    【解决方案2】:

    从文档中,

    getRawValue() 将返回原始的底层 ooxml 值。

    请改用getStringCellValue(),因为它将值作为字符串返回,不会丢失任何内容。

    【讨论】:

    • 正如我所说,如果单元格是“文本”类型,则 getStringCellValue() 有效。对于数字(类型:货币/数字/百分比),您将得到“java.lang.IllegalStateException:无法从数字单元格获取文本值”。即使您使用 getCellType() 编写逻辑来避免这种情况,您也会丢失格式信息
    猜你喜欢
    • 2011-07-09
    • 2011-11-15
    • 2020-12-15
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多