Java ApachePOI单元格式

Java ApachePOI单元格式,java,apache-poi,spreadsheet,Java,Apache Poi,Spreadsheet,我正在尝试使用ApachePOI数据格式化程序将数字2852196格式化为$2852196 NumberFormat numberFormat = NumberFormat.getCurrencyInstance(); dataFormatter.addFormat("($#,##0_);($#,##0)", numberFormat); //after adding the above format, i see this format @ index 0, so i have taken 0

我正在尝试使用ApachePOI数据格式化程序将数字2852196格式化为$2852196

NumberFormat numberFormat = NumberFormat.getCurrencyInstance();
dataFormatter.addFormat("($#,##0_);($#,##0)", numberFormat);
//after adding the above format, i see this format @ index 0, so i have taken 0 in the next line  

String formatCellValue = dataFormatter.formatRawCellContents((Long) cols.get(jj).getValue(), 0, "($#,##0_);($#,##0)");
但我得到的产量是2852196美元。 我遗漏了一些东西或使用了不正确的方法

--
谢谢。

此方法更改列数组中的所有元素

您将通过以下方式拨打电话:

protected final static int TYPE_PORCENTAJE = 3;

setTypeColumn(sheet, Arrays.asList(19, 20, 21), TYPE_PORCENTAJE, null);


protected void setTypeColumn(Sheet sheet, List<Integer> columns, int type, Integer format) {
    CellType cellType = CellType.STRING;
    CellStyle style = sheet.getWorkbook().createCellStyle();
    CreationHelper createHelper = sheet.getWorkbook().getCreationHelper();

    switch (type) {
    case TYPE_NUMBER:
        style.setDataFormat(sheet.getWorkbook().createDataFormat().getFormat(BuiltinFormats.getBuiltinFormat(1)));
        break;
    case TYPE_MONEY:
        style.setDataFormat(
                sheet.getWorkbook().createDataFormat().getFormat(BuiltinFormats.getBuiltinFormat(format)));
        break;
    case TYPE_DATE:
        style.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-mm-dd"));
        break;
    case TYPE_PORCENTAJE:
        style.setDataFormat(sheet.getWorkbook().createDataFormat().getFormat(BuiltinFormats.getBuiltinFormat(0xa)));
        break;
    case TYPE_CUSTOM:
        style.setDataFormat(
                sheet.getWorkbook().createDataFormat().getFormat(BuiltinFormats.getBuiltinFormat(format)));
        break;
    case TYPE_TEXT:
        style.setDataFormat((short) BuiltinFormats.getBuiltinFormat("text"));
        break;
    default:
        break;
    }
    cellType = CellType.NUMERIC;
    final int lastRow = sheet.getLastRowNum();
    for (int i = 1; i <= lastRow; i++) {
        for (int j = 0; j < columns.size(); j++) {
            Cell cell = sheet.getRow(i).getCell(columns.get(j));
            String value = null;
            if (type == TYPE_TEXT) {
                value = cell.getStringCellValue();
            }
            cell.setCellType(cellType);
            cell.setCellStyle(style);
            if (type == TYPE_PORCENTAJE) {
                cell.setCellValue(cell.getNumericCellValue() / 100);
            }
            if (type == TYPE_TEXT) {
                style.setWrapText(true);
                cell.setCellStyle(style);
                cell.setCellValue(value);
            }
        }
    }
}
受保护的最终静态int类型\u PORCENTAJE=3;
setTypeColumn(sheet,Arrays.asList(19,20,21),TYPE_-procentaje,null);
受保护的void setTypeColumn(工作表、列表列、int类型、整数格式){
CellType CellType=CellType.STRING;
CellStyle style=sheet.get工作簿().createCellStyle();
CreationHelper createHelper=sheet.getWorkbook().getCreationHelper();
开关(类型){
案例类型和编号:
style.setDataFormat(sheet.get工作簿().createDataFormat().getFormat(内置信息格式.getBuiltinFormat(1)));
打破
案件类型(货币):
style.setDataFormat(
sheet.getWorkbook().createDataFormat().getFormat(内置信息格式。内置信息格式(格式));
打破
案件类型(日期):
style.setDataFormat(createHelper.createDataFormat().getFormat(“yyyy-mm-dd”);
打破
病例类型:猪:
style.setDataFormat(sheet.get工作簿().createDataFormat().getFormat(内置信息格式.get内置信息格式(0xa)));
打破
案例类型\u自定义:
style.setDataFormat(
sheet.getWorkbook().createDataFormat().getFormat(内置信息格式。内置信息格式(格式));
打破
案例类型\u文本:
style.setDataFormat((短)BuiltInfo.getBuiltInfo(“文本”);
打破
违约:
打破
}
cellType=cellType.NUMERIC;
final int lastRow=sheet.getLastRowNum();

对于(int i=1;我检查了这个,我尝试了那种格式,内容在电子表格中正确生成,但是对于-ve数字,其显示-$1456,而不是$1456)根据金融分析师的术语。你这样做有什么原因吗?为什么不应用单元格中已有的现有格式?嗯……数字应该显示为字符串,即单元格中的$2852196,但当我们选择单元格时,它应该在公式栏中显示为数字2852296。这就是分析师团队的要求艾琳。