poi libreria hssfworkbook example descargar apache coding-style format apache-poi hssf

libreria - En Apache POI HSSF, el tipo de celda aún aparece como Excel "general", aunque tenga formato numérico



java poi xls (2)

Al revisar la API de POI de Apache , parece que debería poder especificar el tipo de celda.

... Cell cell = row.createCell(...); cell.setCellType(Cell.CELL_TYPE_NUMERIC); ...

Estoy usando Apache POI HSSF para generar una hoja de cálculo de Excel desde mi aplicación web Java.

Necesito una celda formateada como "Número" con 2 decimales. (Mis valores en Java son BigDecimales, pero puedo convertirlos a dobles, no hay problema.) Estoy usando este código:

CellStyle numericStyle = wb.createCellStyle(); numericStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00")); // output in this new style... row.createCell(cellnum).setCellValue(((BigDecimal)value).doubleValue()); row.getCell(cellnum).setCellStyle(numericStyle);

El problema es que, aunque esto funciona, Excel todavía muestra mis celdas como General . Necesitan mostrarse como Número . Como resultado, por ejemplo, 0 se muestra como 0, pero debería ser 0.00, lo que sucedería si el formato fuera correcto ( Number ).

Veo que se genera como General porque puedo hacer clic derecho en una celda y luego elegir "Dar formato a las celdas" para ver qué es en este momento.

Gracias por cualquier ayuda. Necesita ser configurado en "Número" por Apache POI HSSF. Cualquier consejo apreciado.


Supongo que aún no ha encontrado una respuesta para su pregunta.

Una forma de mostrar números con dos decimales es establecer un estilo de celda. Esto le permite personalizar el número de decimales y el separador decimal, entre otras cosas.

protected CellStyle getCellStyle(HSSFWorkbook workbook) { CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat( workbook.getCreationHelper().createDataFormat().getFormat("#,##0.00")); return cellStyle; }

Más adelante, cuando complete su libro de trabajo, aplique este estilo de celda a las celdas deseadas:

CellStyle cellStyle = getCellStyle(); //... // create your cell cell.setCellStyle(cellStyle); // set the value

No se mostrará como tipo numérico en Excel. Se muestra como tipo personalizado. Pero visualmente debería ser lo mismo, o al menos lo suficientemente cerca.