Negativos Styles valor de célula em Apache POI
-
06-09-2019 - |
Pergunta
Usando Apache POI para gerar um documento e eu estou tendo um pequeno problema com estilos de células, currentlly eu estou usando:
CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00"));
Que funciona totalmente bem para números positivos, no entanto gostaria de atribuir um estilo diferente para as células negativas automaticamente.
A pergunta é há alguma para configurá-lo sem ter que verificar os valores das células individuais e atribuir um estilo separado para eles?
Ou, alternativamente, existe alguma maneira de dizer Apache POI para usar o construída em formato de moeda excel com uma de suas opções negativas?
Solução
encontrou, graças me: D
CellStyle currencyCellStyle=workbook.createCellStyle();
currencyCellStyle.setDataFormat(format.getFormat("$#,##0.00;[Red]($#,##0.00)"));
Outras dicas
Por poi se recusa a apoiar a primeira opção em moeda excel formatação está além de mim!
Eu não gosto de usar o DecimalFormat para a moeda, porque o seu valor de célula final torna-se um não-numérico, com a introdução do símbolo da moeda. Enquanto trabalhava para uma grande instituição financeira, que foi encarregado de resolver este problema de formatação. A idéia central dessa mudança é, porque POI se recusa a ser razoável e ter um suporte abrangente de opções nativas do Excel, vou infiltrar seu código e alterar seus valores no núcleo. O seguinte é a minha SOLUÇÃO:
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!!!");
}
}
}