Valeur de la cellule Styles négatifs dans Apache POI
-
06-09-2019 - |
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?
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!
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!!!");
}
}
}