代码之家  ›  专栏  ›  技术社区  ›  krzakov

Apache POI,强制使用两个小数点的货币格式

  •  0
  • krzakov  · 技术社区  · 7 年前

    我试图强制apachepoi生成两位数的货币格式。

    我设法制作了样式格式:

    cellStyle.setDataFormat(wb.createDataFormat().getFormat("$#,##0.00"))
    

    但是,一旦在Excel中执行,我会收到以下错误,我想消除这些错误:

    错误: some number formats may have been lost ,

    数字似乎从2个小数点到5个小数点。

    我试图找到apache POI格式化的传奇,但是没有成功。

    1 回复  |  直到 7 年前
        1
  •  2
  •   XtremeBaumer    7 年前

    将注释转换为答案。保留评论,因为它们可能更容易理解

    首先,货币应采用以下格式

    _($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)
    

    现在我们有了格式,让我们来看看所遇到的货币问题。以下代码显示所有带有符号/符号的货币:

    for (Currency c : Currency.getAvailableCurrencies()) {
        System.out.println(c.getCurrencyCode() + " : " + c.getSymbol());
    }
    

    USD 有一个“real”符号,而该类中的所有其他货币只有其货币代码作为符号。这似乎才是真正的问题。使用此代码:

    String format = "_(<ccy>* #,##0.00_);_(<ccy>* (#,##0.00);_(<ccy>* \\\"-\\\"??_);_(@_)";
    style.setDataFormat(wb.createDataFormat().getFormat(format.replace("<ccy>", "€")));
    

    BGN 但毕竟, apache-poi 不是excel。

    只要提供了正确的符号,这种格式就可以用于大多数货币。我查了一些符号符号符号 this site 并发现并非所有的货币符号都受支持。 Дин. 工作时间 CHF RD$ 两者都失败了。这一点将来可能会改变。


    请注意,我用 apache-poi 3.15

    推荐文章