首页 文章

Apache POI中的负单元格值样式

提问于
浏览
0

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

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

这对于正数而言完全正常,但是我想自动为负数单元分配不同的样式 .

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

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

2 回答

  • 5

    发现它,谢谢我:D

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

    为什么poi REFUSES支持excel货币格式化的FIRST选项超出我的范围!
    enter image description here

    我不喜欢使用DecimalFormat作为货币,因为随着货币符号的引入,您的结束单元格值变为非数字值 . 在为一家大型金融机构工作时,我的任务是解决这个格式问题 . 这种变化的核心思想是,因为POI拒绝合理并且全面支持Excel的本机选项,我将渗透他们的代码并改变他们的核心 Value 观 . 以下是我的解决方法:

    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!!!");
            }
        }
    }
    

相关问题