Apache POI, форсировать формат валюты с двумя десятичными знаками - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь заставить Apache POI выдавать двухзначный формат валюты.

Мне удалось произвести форматирование стиля:

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

Однако после выполнения в Excel я получаю следующую ошибку, от которой я хотел бы избавиться:

ошибка: some number formats may have been lost,

числа имеют от 2 десятичных знаков до 5.

Я попытался найти легенду о форматировании POI apache, но безуспешно.

1 Ответ

0 голосов
/ 29 августа 2018

Преобразование комментариев в ответ. Сохранение комментариев, так как они могут быть легче следовать через

Прежде всего, следующий формат должен использоваться для валют

_($* #,##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

...