Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApachePOI货币数据格式_Java_Apache Poi - Fatal编程技术网

Java ApachePOI货币数据格式

Java ApachePOI货币数据格式,java,apache-poi,Java,Apache Poi,我尝试使用ApachePOI将数字转换为欧洲货币样式 HSSFDataFormat cf = workbook.createDataFormat(); currencyCellStyle = workbook.createCellStyle(); currencyCellStyle.setDataFormat(cf.getFormat("#.###,#0")); 例如,我有2400和2.4 我想要的是2400,00和2,40。 但是POI给了我2400,0和2,40。 当我试着把它改成 cur

我尝试使用ApachePOI将数字转换为欧洲货币样式

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和2400。 这也不是我想要的

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


Thx和问候最后Gagravarr给出了解决这个问题的正确建议

最后的解决办法是:

HSSFDataFormat cf = workbook.createDataFormat();
currencyCellStyle = workbook.createCellStyle();
currencyCellStyle.setDataFormat(cf.getFormat("#,##0.00\\ _€"));
手动创建excel文件后,出现了解决方案。 然后由ApachePOI和 使用

 cell.getCellStyle().getDataFormatString() 
结果是0.00欧元

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


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

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

#,##0\ "€";\-#,##0\ "€"
因此,设置格式:

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

希望这会对您有所帮助。

我认为您需要将格式字符串设置为US/UK样式,然后在欧洲地区的Excel副本中打开该文件,它将按照您的预期呈现。你试过了吗?thx部分有效。使用“#,#####.#0”时,逗号和点以欧式样式设置,在excel中打开时会更改为2.400,0。但我在逗号后只得到一个零。输入的数字是2400。如果您在Excel中创建一个新文件,按照您想要的方式设置样式,然后将其加载到Apache POI中并读取格式字符串,会发生什么情况?非常好。我创建了一个excel文件,并将单元格的样式设置为两位数的货币。然后,我用ApachePOI读取文件,用cell.getCellStyle().getDataFormatString()读取单元格样式,结果返回“#,##0.00 \€”,因此我将此格式添加为我的格式字符串。因此,我使用了cf.getFormat(“#,###0.00\\\\\\ u€”),它工作得非常好。从未在其他地方见过使用欧元符号和下划线的格式。最好将其添加为答案,这样每个人都知道它已解决!嗨,我有你同样的问题。阅读此页时,我得到了格式字符串,将其设置为currencyCellStyle变量,但我不知道如何使用它读取正确的值。cell.getNumericCellValue()?cell.getStringCellValue()?您能解释一下您是如何使用刚才设置的数据格式读取单元格值的吗?谢谢。我还想补充一点,我需要读取的单元格既有数字也有计算过的,所以也有公式需要计算。我有一个HSSFFormulaEvaluator来评估它们,但结果仍然与Excel显示的结果不一致(我说的是精度和舍入)。嗨,对不起,我想我帮不了你,因为我没有读取单元格值。我只是在用setCellValue写作。例如cell.setCellStyle(currencyCellStyle)和cell.setCellValue(value)好的提示。就我而言,
###0,00€-# ##0,00 €;- 欧元
,#0.00 \“€”\-\##0.00\ "€";\-\ “€”
所以在Java中它是
getFormat(“\\”、“\\”、“\\-\”、“\\-\”、“\\”、“\\-\”)