Apache POI,带有两个小数点的强制货币格式

时间:2018-08-29 09:27:58

标签: java apache-poi

我尝试强制Apache POI生成两位数的货币格式。

我设法产生样式格式:

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

但是,一旦在Excel中执行,我将收到以下希望摆脱的错误:

错误:some number formats may have been lost

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

我试图找到Apache POI格式的图例,但没有成功。

1 个答案:

答案 0 :(得分:2)

将评论转换为答案。保留注释,因为它们可能更易于遵循

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

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

(此格式直接来自excel,因此可以100%使用)。

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

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

由此可见,只有USD带有“真实”符号,而该类别中的所有其他货币仅具有其货币代码作为符号。这似乎是这里的实际问题。使用此代码:

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

我们可以看到,它确实适用于实际的符号,但是如果将符号替换为它们的货币代码,它将失败。这导致OP检查excel,他发现excel本身为BGN提供了一种货币格式,但毕竟apache-poi不是excel。

只要提供正确的符号,此提供的格式就可以使用大多数货币。我检查了this site中的几种货币符号,发现并非所有货币符号都受支持。 Дин.有效,而CHFRD$都失败。将来可能会更改。


请注意,我使用apache-poi 3.15对其进行了测试。在3.17版本中这可能已经更好了