为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2021-08-19 17:28:20
我尝试强制 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条经验 获得超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。

只要提供了正确的符号,此提供的格式将适用于大多数货币。我检查了这个网站上的几种货币符号,发现并非所有货币符号都受支持。Дин.而工程CHFRD$都失败。这在未来可能会改变。


请注意,我使用apache-poi 3.15. 这可能已经在 3.17 中更好用了


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信