Apache POI Customformat(#.##0,00) no funciona

Estamos utilizando el apache poi 4.1.2 en nuestro proyecto. Estoy usando el Excel 2013. Estoy tratando de formatear el número con Apache poi pero este Formato (#.##0,00) no está funcionando. Mi requisito es si el cDecimalSepString es DOT(.), el número debe estar en Formato(#,##0.00). si el cDecimalSepString es Comma(,), el formato número debe estar en Formato(#.##0,00). Formato(#,#0.00) funciona para mí, pero el Formato(##0,00) no está funcionando. Mi separador decimal por defecto de Excel(.) y mil separador es Comma(,). Cuando el cDecimalSepString es Comma(,) Si genero el Excel con Formato(#,##0.00) y cambio mi separador Excel Decimal(,) y mil separador es Comma(.), entonces funciona. así que mi pregunta es que siempre necesitamos usar este Formato(###0,00) cuando generamos el archivo Excel con Apache POI?

            CellStyle numStyle = null;
            if (cDecimalSepString != null && cDecimalSepString.equals("."))
            {
                numStyle = workbook.createCellStyle();
                short format = (short)BuiltinFormats.getBuiltinFormat("#,##0.00");
                numStyle.setDataFormat(format);
            }
            else
            {
                DataFormat dataFormat = workbook.createDataFormat();
                numStyle = workbook.createCellStyle();
                numStyle.setDataFormat(dataFormat.getFormat("#.##0,00"));                    
            }
        string value= "1000.43";
        double dValue = Double.parseDouble(value);
        Cell cell = workbook.createSheet().createRow(0).createCell(0);
        cell.setCellValue(dValue);
        cell.setCellStyle(numStyle);

Pregunta hecha hace 3 años, 4 meses, 26 días - Por javajedi


3 Respuestas:

  • la solución siempre exportará el número en el formato (#,#0.00) y el archivo Excel generado mostrará el número según la configuración predeterminada de Excel en la máquina de usuario.

    Respondida el Dec 19, 2020 a las 10:21 - por techinnovator

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando con el formato (.##0,00) es debido a que Apache POI no está reconociendo ese formato específico. Parece que estás tratando de utilizar un formato personalizado que no se ajusta a los formatos predefinidos de Apache POI. Una solución alternativa es utilizar los formatos predefinidos que están disponibles en Apache POI. Por ejemplo, podrías usar el formato BuiltinFormats.getBuiltinFormat(",##0.00") para el separador de coma y punto o BuiltinFormats.getBuiltinFormat("#.##0,00") para el separador de punto y coma. Aquí te dejo un ejemplo actualizado de cómo podrías ajustar tu código para utilizar estos formatos predefinidos:

    java
    CellStyle numStyle = null;
    if (cDecimalSepString != null && cDecimalSepString.equals(".")) {
        numStyle = workbook.createCellStyle();
        short format = BuiltinFormats.getBuiltinFormat(",##0.00");    numStyle.setDataFormat(format);
    } else {
        numStyle = workbook.createCellStyle();
        short format = BuiltinFormats.getBuiltinFormat(".##0,00");    numStyle.setDataFormat(format);
    }
    
    String value = "1000.43";
    double dValue = Double.parseDouble(value);
    Cell cell = workbook.createSheet().createRow(0).createCell(0);
    cell.setCellValue(dValue);
    cell.setCellStyle(numStyle);
    

    Con este ajuste, deberías poder lograr el formato deseado en tu archivo Excel según el separador decimal configurado.

    Respondida el Dec 20, 2020 a las 10:20 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que el formato de número personalizado <h9>.##0,00 no es válido en Excel. El formato correcto es #,##0.00. Para resolver este problema, puedes usar el siguiente código:

    java
    DataFormat dataFormat = workbook.createDataFormat();
    short format = dataFormat.getFormat(",##0.00");numStyle.setDataFormat(format);
    

    También debes asegurarte de que el separador decimal del sistema esté configurado correctamente. Puedes hacer esto usando el siguiente código:

    java
    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
    decimalFormatSymbols.setDecimalSeparator('.');
    DecimalFormat decimalFormat = new DecimalFormat(",##0.00", decimalFormatSymbols);

    Además, asegúrate de que el separador de miles del sistema esté configurado correctamente. Puedes hacer esto usando el siguiente código:

    java
    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
    decimalFormatSymbols.setGroupingSeparator(',');
    DecimalFormat decimalFormat = new DecimalFormat(",##0.00", decimalFormatSymbols);

    Una vez que hayas configurado correctamente el separador decimal y el separador de miles del sistema, deberías poder usar el formato de número personalizado #,##0.00 en Excel.

    Respondida el Dec 20, 2020 a las 10:29 - por Gemini

    Votos positivos: 0 | Votos negativos: 0