es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar el tipo de celda de las celdas de Excel utilizando Apache Poi 5.1

Estoy intentando cambiar el tipo de celda de general a numérico en una hoja de cálculo de Excel utilizando Apache Poi. He creado el archivo .xlsx a partir de un archivo .csv utilizando Poi. Ahora necesito cambiar el tipo de celda de las columnas “E” y “F” del archivo xlsx a numérico. Esto es lo que he intentado:

    FileInputStream fis = new FileInputStream(final_report_name);
    XSSFWorkbook workBook = new XSSFWorkbook(fis);
    XSSFSheet new_sheet = workBook.getSheetAt(0);

    XSSFDataFormat format = workBook.createDataFormat();
    XSSFCellStyle style = workBook.createCellStyle();
    style.setDataFormat(format.getFormat(" # "));

    new_sheet.setDefaultColumnStyle(4, style); //Estos no funcionan
    new_sheet.setDefaultColumnStyle(5, style); //Mantienen el tipo de celda general

    XSSFRow row = new_sheet.getRow(3);
    Cell cell = row.getCell(5); //Esto cambió el tipo de celda a " # "
    cell.setCellStyle(style); //Pero el número aún se muestra como texto

    FileOutputStream fileOutputStream = new FileOutputStream(final_report_name);
    workBook.write(fileOutputStream);
    workBook.close();

El estilo de columna no funciona en absoluto, y el estilo de celda funcionó, pero el número aún se muestra como texto. Todavía tengo que ir manualmente al ícono que aparece al lado que dice “El número en esta celda está formateado como texto o precedido por un apóstrofo”, y luego hacer clic en el menú “Convertir en número” (ver imagen). ¿Cuál podría ser el problema aquí y cómo puedo lograr esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cambiar el tipo de celda de general a numérico en una hoja de Excel utilizando Apache Poi, puede probar las siguientes modificaciones en el código:

    FileInputStream fis = new FileInputStream(final_report_name);
    XSSFWorkbook workBook = new XSSFWorkbook(fis);
    XSSFSheet new_sheet = workBook.getSheetAt(0);
    
    XSSFDataFormat format = workBook.createDataFormat();
    XSSFCellStyle style = workBook.createCellStyle();
    style.setDataFormat(format.getFormat("#"));
    
    XSSFRow row;
    Cell cell;
    for(int i = 3; i <= new_sheet.getLastRowNum(); i++){ //iterar a través de las filas
        row = new_sheet.getRow(i);
        cell = row.getCell(4); //obtener celda en la columna E
        cell.setCellStyle(style); //establecer estilo numérico
        cell = row.getCell(5); //obtener celda en la columna F
        cell.setCellStyle(style); //establecer estilo numérico
        double value = cell.getNumericCellValue(); //obtener valor de celda como double
        row.getCell(5).setCellValue(value); //establecer valor de celda como double
    }
    
    FileOutputStream fileOutputStream =  new FileOutputStream(final_report_name);
    workBook.write(fileOutputStream);
    workBook.close();
    

    El código anterior itera a través de las filas de la hoja y establece el estilo de las celdas de las columnas E y F como numérico. Luego, recupera el valor de la celda como double utilizando getNumericCellValue() y lo establece nuevamente en la celda utilizando setCellValue(). Esto debería convertir los valores de las columnas E y F a numérico y eliminar el mensaje de advertencia al abrir el archivo de Excel.

Comments are closed.