我尝试强制Apache POI生成两位数的货币格式。
我设法产生样式格式:
cellStyle.setDataFormat(wb.createDataFormat().getFormat("$#,##0.00"))
但是,一旦在Excel中执行,我将收到以下希望摆脱的错误:
错误:some number formats may have been lost
,
数字似乎从2个小数点到5个数字。
我试图找到Apache POI格式的图例,但没有成功。
答案 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中的几种货币符号,发现并非所有货币符号都受支持。 Дин.
有效,而CHF
和RD$
都失败。将来可能会更改。
请注意,我使用apache-poi 3.15
对其进行了测试。在3.17版本中这可能已经更好了