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

Java Apache POI,带两个小数点的强制货币格式,java,apache-poi,Java,Apache Poi,我试图强制ApachePOI生成两位数的货币格式 我成功地生成了样式格式: cellStyle.setDataFormat(wb.createDataFormat().getFormat("$#,##0.00")) 但是,一旦在Excel中执行,我会收到以下错误,我希望消除这些错误: 错误:某些数字格式可能已丢失 数字的小数点从2到5 我试图找到ApachePOI格式的传说,但没有成功 将评论转换为答案。保留评论,因为它们可能更容易贯彻执行 首先,货币应使用以下格式 _($* #,##0.00

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

我成功地生成了样式格式:

cellStyle.setDataFormat(wb.createDataFormat().getFormat("$#,##0.00"))
但是,一旦在Excel中执行,我会收到以下错误,我希望消除这些错误:

错误:
某些数字格式可能已丢失

数字的小数点从2到5

我试图找到ApachePOI格式的传说,但没有成功

将评论转换为答案。保留评论,因为它们可能更容易贯彻执行

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

_($* #,##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>", "€")));
String format=“\u(*,\ 35;##############################;
style.setDataFormat(wb.createDataFormat().getFormat(format.replace(“,”€));
我们可以看到,它确实适用于实际符号,但如果符号被其货币代码替换,则会失败。这导致OP检查excel,他发现excel本身为
BGN
提供货币格式,但毕竟,
apache poi
不是excel

只要提供了正确的符号,这种提供的格式将适用于大多数货币。我从中检查了一些货币符号,发现并非所有货币符号都受支持。
Бааааа。
工作,而
CHF
RD$
都失败。这可能会在将来更改



请注意,我用ApachePOI3.15测试了它。这可能在3.17中工作得更好。这可能会有所帮助。我在我的一个项目中使用了类似的格式。它看起来是这样的:
($*),(0.00);($*($*),(0.00);(U0.00);(U*($*)-(U@)
@XtremeBaumer是两个小数点吗?看起来相当长。问题是我需要动态解决货币的灵活性,但我认为String.format(…)就可以了。它代表2个小数点。它与M4GIC共享的链接上的第二个答案相同,M4GIC是一种
货币
格式,转换为自定义格式。其行为应完全相同