Apache POI中的负单元格值样式

时间:2009-05-29 14:37:09

标签: java apache excel apache-poi

使用Apache POI生成文档,我对单元格样式有一个小问题,我正在使用:

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

对于正数而言,这完全正常,但我想自动为负数单元指定不同的样式。

问题是有没有设置它而不必检查单个单元格值并为它们分配单独的样式?

或者有没有办法告诉Apache POI使用内置的excel货币格式及其一个否定选项?

2 个答案:

答案 0 :(得分:5)

找到它,谢谢我:D

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

答案 1 :(得分:0)

为什么poi拒绝支持Excel货币格式的FIRST选项超出了我! enter image description here

我不喜欢将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!!!");
        }
    }
}