Domanda

Utilizzo di Apache POI per generare un documento e sto avendo un piccolo problema con stili di cella, currentlly sto usando:

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

Il che funziona del tutto bene per i numeri positivi, tuttavia vorrei assegnare automaticamente uno stile diverso per le cellule negative.

Domanda è non v'è alcun impostare questa funzione senza dover controllare i singoli valori delle celle e assegnare uno stile separato per loro?

In alternativa esiste un modo per dire Apache POI di utilizzare il costruito nel formato valuta excel con una delle sue opzioni negative?

È stato utile?

Soluzione

Trovato esso, grazie a me: D

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

Altri suggerimenti

Perché poi si rifiuta di sostenere la prima opzione nella formattazione valuta Excel è oltre me! entrare descrizione dell'immagine qui

Non mi piace usare la DecimalFormat per la valuta perché il valore di una cella end diventa un non numerico con l'introduzione del simbolo di valuta. Mentre si lavora per un importante istituto finanziario, che è stato incaricato di risolvere il problema di formattazione. L'idea centrale di questo cambiamento è, perché POI si rifiuta di essere ragionevoli e hanno un supporto completo di opzioni native di Excel, io infiltrato il loro codice e modificarne i valori al centro. Quanto segue è la mia SOLUZIONE:

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!!!");
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top