Question

En utilisant Apache POI pour générer un document et je vais avoir un petit problème avec des styles de cellules, currentlly j'utilise:

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

Ce qui fonctionne tout à fait bien pour les nombres positifs, mais je voudrais attribuer un style différent aux cellules négatives automatiquement.

Question est est-il de régler cela sans avoir à vérifier les valeurs des cellules individuelles et d'attribuer un style distinct pour eux?

Ou est-il encore moyen de dire Apache POI à utiliser intégré dans Excel format monnaie avec une de ses options négatives?

Était-ce utile?

La solution

Je l'ai trouvé, moi merci: D

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

Autres conseils

Pourquoi poi REFUSE pour soutenir la première option dans Excel mise en forme de la monnaie est au-delà de moi! entrer la description d'image ici

Je n'aime pas utiliser la DecimalFormat pour la devise parce que votre valeur de la cellule de fin devient un non-numérique avec l'introduction du symbole monétaire. Tout en travaillant pour une institution financière, j'ai été chargé de résoudre ce problème de formatage. L'idée de base de ce changement est, parce que POI refuse d'être raisonnable et avoir le soutien complet des options natives d'Excel, j'infiltre leur code et changer leurs valeurs au cœur. Ce qui suit est mon DEPANNAGE:

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!!!");
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top