Frage

Apache POI verwenden, ein Dokument zu erzeugen und ich ein kleines Problem mit Zellenformaten habe, currentlly ich verwende:

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

Welche völlig in Ordnung für positive Zahlen arbeitet, jedoch würde Ich mag automatisch einen anderen Stil zu negativen Zellen zugeordnet werden.

Frage ist es eine dieser bis zu setzen, ohne die einzelnen Zellenwerte zu überprüfen und einen separaten Stil zuweisen?

oder alternativ gibt es eine Möglichkeit Apache POI zu sagen, die eingebauten Excel Währungsformat mit einem seiner negativen Optionen zu benutzen?

War es hilfreich?

Lösung

Gefunden es, dank mir: D

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

Andere Tipps

Warum poi WEIGERT die erste Option in Excel-Währung Formatierung zu unterstützen, ist mir! eingeben Bild Beschreibung hier

Ich weiß nicht wie die DecimalFormat für Währung verwenden, weil Ihr Endzelle Wert ein nicht-numerische mit der Einführung des Währungssymbols wird. Während für ein großes Finanzinstitut arbeitet, wurde ich mit der Lösung dieses Problems Formatierung beauftragt. Der Kerngedanke dieser Änderung ist, weil POI, vernünftig zu sein verweigert und hat eine umfassende Unterstützung von Excel nativen Optionen, werde ich ihren Code infiltrieren und ihre Werte im Kern verändern. Das Folgende ist meine Abhilfe:

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!!!");
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top