【发布时间】:2020-04-01 18:13:38
【问题描述】:
我正在使用 Apache POI 更改 Excel 文件并将一些数据放入其中。 我尝试的大部分内容都很顺利。但是我的货币格式没有 100% 正确完成...
我想要的是我的货币格式像€ 1.000,43。所以左边是欧元符号,右边是金额,点作为千位分隔符,逗号作为小数分隔符,两位小数。
如果我在 Excel 中执行此操作并应用此自定义格式规则,它将起作用:"_ [$€-nl-BE] * #.##0,00_ ;_ [$€-nl-BE] * -#.##0,00_ ;_ [$€-nl-BE] * \"-\"??_ ;_ @_ "
所以我只是复制了该规则并通过 Apache POI 应用它:
XSSFDataFormat dataFormat = (XSSFDataFormat) workbook.createDataFormat();
cellStyle.setDataFormat(dataFormat.getFormat("_ [$€-nl-BE] * #.##0,00_ ;_ [$€-nl-BE] * -#.##0,00_ ;_ [$€-nl-BE] * \"-\"??_ ;_ @_ "));
但是,这会导致一些不同的结果:€ 1.000,4300。您可以看到它运行良好,除了小数点。有4个而不是2个...
当我在 Excel 中查看自定义格式时,它也略有不同(注意 4 个零):_ [$€-nl-BE] * #.##0,00000_ ;_ [$€-nl-BE] * -#.##0,00000_ ;_ [$€-nl-BE] * "-"?????_ ;_ @_
所以我想知道某个地方的某个人(Apache POI 或 Excel)确实输入了 4 个小数而不是我定义的 2 个小数,这可能有什么问题。请注意,如果我在 Excel 中将其更改回小数点后 2 位,则它再次显示正确。即使在保存并关闭并重新打开文档之后。
【问题讨论】:
-
它是否适用于
XSSFDataFormat dataFormat = workbook.getCreationHelper().createDataFormat();而不是XSSFDataFormat dataFormat = (XSSFDataFormat) workbook.createDataFormat();? -
@deHaar 不,没有任何区别...所以我将其更改为:
XSSFDataFormat dataFormat1 = (XSSFDataFormat) workbook.getCreationHelper().createDataFormat(); cellStyle.setDataFormat(dataFormat1.getFormat("_ [$€-nl-BE] * #.##0,00_ ;_ [$€-nl-BE] * -#.##0,00_ ;_ [$€-nl-BE] * \"-\"??_ ;_ @_ ")); -
那是否按预期工作?
-
不,不是,同样的结果...
标签: java excel apache-poi