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?

Foi útil?

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! enter descrição da imagem aqui

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!!!");
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top