使用Apache POI生成和我有一个小问题,单元格样式的文档时,currentlly我使用:

CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00"));

其中一期工程为正数完全正常,但是我想自动分配一个不同的风格阴性细胞。

问题是是否有任何设置此而不必检查单个电池值,并分配一个单独的样式他们?

或者或者有没有什么办法让Apache POI使用内置在Excel货币格式,其负面选项之一?

有帮助吗?

解决方案

找到它,由于我:d

CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00;[Red]($#,##0.00)"));

其他提示

为什么POI拒绝支持在Excel货币格式的第一个选项是超越我! “在这里输入的图像描述”

我不喜欢使用的DecimalFormat为货币,因为你的末端电池值变为一个非数字与引进的货币符号的。虽然工作的主要金融机构,我和解决这种格式问题负责。这种变化的核心思想是,因为POI拒绝是合理的,并有全面支持的Excel自带的选择,我会渗入他们的代码,并在核心改变它们的值。以下是我的替代方法:

private static final String CURRENCY_FORMAT_OVERRIDE = "\"$\"#,##0.00_);-\"$\"#,##0.00";
private static final String CURRENCY_FORMAT_TARGET = "\"$\"#,##0.00_);(\"$\"#,##0.00)";    

static { // static class level initializer
    Field field = org.apache.poi.ss.usermodel.BuiltinFormats.class.getDeclaredField("_formats");            
    field.setAccessible(true);
    String[] _formats = (String[])field.get(new org.apache.poi.ss.usermodel.BuiltinFormats());
    for(int i = 0; i < _formats.length; ++i) {
        if(_formats[i].equals(CURRENCY_FORMAT_TARGET)) {
            _formats[i]=CURRENCY_FORMAT_OVERRIDE;
            System.out.println("TAKE THAT, POI!!!");
        }
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top