【问题标题】:Apache POI Currency Data FormatApache POI 货币数据格式
【发布时间】:2019-05-09 21:57:27
【问题描述】:

我尝试使用 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。 这也不是我想要的。

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

谢谢和问候

【问题讨论】:

  • 我认为您需要将格式字符串设置为 US/UK 样式,然后在欧洲区域设置的 Excel 副本中打开文件,它会按您的预期呈现。你试过了吗?
  • 感谢部分工作。使用 "#,###.#0" 时,逗号和点设置为欧洲风格,在 excel 中打开时更改为 2.400,0 。但我在逗号后只得到一个零。输入数字是2400。
  • 如果你在 Excel 中创建一个新文件,按照你想要的样式设置它,然后在 Apache POI 中加载它并读取格式字符串,你会看到什么?
  • 完美。我创建了一个 excel 文件并将单元格的样式设置为 2 位数的货币。然后我用 apache poi 读取文件并用 cell.getCellStyle().getDataFormatString() 读取单元格样式,它返回 '#,##0.00\ _€' 所以我将此格式添加为我的格式字符串。因此,我有 cf.getFormat("#,##0.00\\ _€") 并且效果很好。从未在其他地方见过这种带有欧元符号和下划线的格式。
  • 最好把它添加为答案,这样大家都知道它已经解决了!

标签: java apache-poi


【解决方案1】:

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

最终的解决方案是:

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

手动创建excel文件后出现了解决方案。 然后由 Apache Poi 读入并 用

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

结果是#,##0.00\ _€

所以我在上面的代码sn-p中使用了这种格式,得到了正确的结果。

谢谢

【讨论】:

  • 您好,我遇到了同样的问题。阅读此页面时,我得到了格式字符串,将其设置为 currencyCellStyle 变量,但我不知道如何使用它来读取正确的值。 cell.getNumericCellValue()?细胞.getStringCellValue()?您能解释一下您是如何使用刚刚设置的数据格式读取单元格值的吗?谢谢。
  • 我还想补充一点,我需要阅读的单元格既是数字也是计算的,所以也有公式需要评估。我有一个 HSSFFormulaEvaluator 来评估它们,但结果仍然与 Excel 显示的结果不一致(我说的是精度和舍入)。
  • 嗨,对不起,我想我不能帮助你,因为我不读取单元格值。我只是在用 setCellValue 写。例如 cell.setCellStyle(currencyCellStyle) 和 cell.setCellValue(value)
  • 好建议。在我的例子中 # ##0,00 €;- # ##0,00 €;- €#,##0.00\ "€";\-\ #,##0.00\ "€";\-\ "€" 所以在 Java 中是 getFormat("#,##0.00\\ \"€\";\\-\\ #,##0.00\\ \"€\";\\-\\ \"€\"")
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    所以设置格式:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2011-01-23
      相关资源
      最近更新 更多