我尝试强制 Apache POI 生成两位数的货币格式。我设法生成样式格式:cellStyle.setDataFormat(wb.createDataFormat().getFormat("$#,##0.00"))但是,一旦在 Excel 中执行,我收到以下错误,我想摆脱它:错误:some number formats may have been lost,数字似乎有 2 个小数点到 5 个小数点。我试图找到 apache POI 格式的传说,但没有成功。
1 回答

一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
将评论转换为答案。保留评论,因为它们可能更容易跟进
首先,货币应使用以下格式
_($* #,##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。
只要提供了正确的符号,此提供的格式将适用于大多数货币。我检查了这个网站上的几种货币符号,发现并非所有货币符号都受支持。Дин.
而工程CHF
和RD$
都失败。这在未来可能会改变。
请注意,我使用apache-poi 3.15
. 这可能已经在 3.17 中更好用了
添加回答
举报
0/150
提交
取消