Apache POI的基本Excel货币格式

Dav*_*e K 27 java apache-poi

我能够将单元格格式化为Dates,但我无法将单元格格式化为货币...任何人都有一个如何创建样式以使其工作的示例?我下面的代码显示了我正在创建的样式... styleDateFormat的工作方式类似于冠军,而styleCurrencyFormat对单元格没有影响.

private HSSFWorkbook wb;
private HSSFCellStyle styleDateFormat = null;
private HSSFCellStyle styleCurrencyFormat = null;
Run Code Online (Sandbox Code Playgroud)

......

public CouponicsReportBean(){
    wb = new HSSFWorkbook();
    InitializeFonts();

}

public void InitializeFonts()
{
    styleDateFormat = wb.createCellStyle();
    styleDateFormat.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));


    styleCurrencyFormat = wb.createCellStyle();
    styleCurrencyFormat.setDataFormat(HSSFDataFormat.getBuiltinFormat("$#,##0.00"));

}
Run Code Online (Sandbox Code Playgroud)

Dav*_*e K 42

在仔细阅读文档之后,我找到了答案:

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDataFormat.html

只需找到合适的预设格式并提供代码即可.

    styleCurrencyFormat.setDataFormat((short)8); //8 = "($#,##0.00_);[Red]($#,##0.00)"
Run Code Online (Sandbox Code Playgroud)

以下是更多示例:http: //www.roseindia.net/java/poi/setDataFormat.shtml

  • 内置格式列表如下:https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html (3认同)
  • 内置格式表很有用……但是现在谁指的是硬编码的数值?映射 POI_FORMAT_CURRENCY=8 等会不会有伤害? (3认同)

And*_*rew 16

至少对于Excel 2010:进入Excel.按照您希望的方式格式化单元格.

在此输入图像描述

然后回到格式对话框.选择自定义.

在此输入图像描述

复制粘贴它在Type:into下的顶行上的文本

createHelper.createDataFormat().getFormat("<here>");
Run Code Online (Sandbox Code Playgroud)

例:

createHelper.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"); //is the "Accounting" format.
Run Code Online (Sandbox Code Playgroud)

确保使用double设置填充单元格. 使用索引可能会导致不同版本的Excel出现问题.请注意,您在上面创建的新格式最终会出现在第二步的自定义对话框中.

  • 伟大的!这是救命稻草。我能够得到正确的货币。这意味着如果我使用这种方法格式化单元格,当我在 Excel 中打开文档时,单击单元格,右键单击以获取“格式化单元格”,我可以在格式类别下获取“货币”!谢谢谢谢谢谢 (2认同)

use*_*214 6

只是对上述回复的更新.短'8'对我不起作用,但'7'不起作用.

cell.setCellValue(416.17);      
cellStyle.setDataFormat((short)7);
cell.setCellStyle(cellStyle);
Run Code Online (Sandbox Code Playgroud)

O/P是416.00美元