Apache POI货币数据格式

时间:2012-12-12 11:14:38

标签: java apache-poi

我尝试使用Apache POI将数字转换为欧洲货币风格

HSSFDataFormat cf = workbook.createDataFormat();
currencyCellStyle = workbook.createCellStyle();
currencyCellStyle.setDataFormat(cf.getFormat("#.###,#0"));

我有例如2400和2.4

我想要的是2400,00和2,40。 但POI给了我2400,0和2,40。 当我尝试将其更改为

currencyCellStyle.setDataFormat(cf.getFormat("#.###,00"));

我得到的结果是2400,00和2,400。 那也不是我想要的。

是否有可能让两个值都正确?

Thx和Greetings

3 个答案:

答案 0 :(得分:10)

最后,Gagravarr给出了解决这个问题的正确提示。

最终的解决方案是:

HSSFDataFormat cf = workbook.createDataFormat();
currencyCellStyle = workbook.createCellStyle();
currencyCellStyle.setDataFormat(cf.getFormat("#,##0.00\\ _€"));

手动创建excel文件后出现了解决方案。 然后由Apache Poi和它读取 使用

提取格式字符串
 cell.getCellStyle().getDataFormatString() 

结果是#,## 0.00 \ _€

所以我在上面的代码片段中使用了这种格式,它给出了正确的结果。

Thx

答案 1 :(得分:3)

上述方法的更新: 手动创建具有所需货币格式的Excel文件后,可以在“自定义”类别下(在“单元格格式”对话框中)获取格式字符串。这样我们就不需要通过poi读取excel来获取这个字符串了。

答案 2 :(得分:1)

由于我的声誉而无法发表评论。但是,如果您需要每个第三个数字都带点的Integer€(例如24.000.123€),则模式为:

#,##0\ "€";\-#,##0\ "€"

因此设置格式:

cell.getCellStyle().setDataFormat(cf.getFormat("#,##0\\ \"€\";\\-#,##0\\ \"€\""));

希望这会有所帮助。