Conversión de Archivos CSV a Excel en Java con Spire.XLS

La transformación de archivos CSV a formato Excel es una tarea común para desarrolladores Java que gestionan informes, flujos de datos o procesos de conversión. Aunque es posible procesar archivos CSV manualmente, esto suele derivar en código complejo y un control limitado sobre el formato. El uso de librerías especializadas en Excel, como Spire.XLS para Java, simplifica enormemente este proceso, ofreciando un control exhaustivo sobre el diseño, los estilos y la integración de datos.

Configuración de Spire.XLS en Proyectos Java

Antes de proceder con la conversión de CSV a Excel, es necesario integrar Spire.XLS para Java en su proyecto. Esta librería es compatible con los formatos .xls y .xlsx, y proporciona una API intuitiva para crear y manipular documentos Excel sin la necesidad de tener Microsoft Office instalado.

Integración mediante Maven

Para incluir Spire.XLS a través de Maven, añada el siguiente repositorio y dependencia a su archivo pom.xml:

<repositories>
   <repository>
       <id>com.e-iceblue</id>
       <name>e-iceblue</name>
       <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
       <groupId>e-iceblue</groupId>
       <artifactId>spire.xls</artifactId>
       <version>15.7.7</version>
   </dependency>
</dependencies>

Inclusión Manual de JAR

Alternativamente, puede descargar el archivo JAR de Spire.XLS para Java e incluirlo directamente en el classpath de su proyecto.

Conversión Básica de CSV a Archivo Excel en Java

El escenario más fundamental implica la conversión de un único archivo .csv a un formato .xlsx o .xls. Con Spire.XLS, este proceso se reduce a dos pasos principales: cargar el CSV y guardar el resultado como un archivo Excel.

import com.spire.xls.*;

public class ConvertidorCsvExcel {
   public static void main(String[] args) {
       // Crear una nueva instancia de Workbook
       Workbook libroDestino = new Workbook();

       // Definir la ruta del archivo CSV de origen y su delimitador
       String rutaCsvEntrada = "datos_origen.csv";
       String delimitadorCsv = ","; // Por ejemplo, coma
       libroDestino.loadFromFile(rutaCsvEntrada, delimitadorCsv);

       // Especificar la ruta y el formato para el archivo Excel de salida
       String rutaExcelSalida = "salida_estandar.xlsx";
       libroDestino.saveToFile(rutaExcelSalida, ExcelVersion.Version2013);
       System.out.println("Conversión completada a: " + rutaExcelSalida);
   }
}

Para generar un archivo en formato .xls, simplemente cambie el parámetro de versión a ExcelVersion.Version97to2003.

Además, la librería permite especificar un delimitador personalizado y las coordenadas de inicio para la importación (fila y columna), lo cual es útil cuando el CSV incluye encabezados o un diseño fijo.

libroDestino.loadFromFile("datos_semicolon.csv", ";", 3, 2); // Cargar desde la fila 3, columna 2

Personalización del Formato de Salida Excel

Al generar documentos Excel para informes o presentaciones, la aplicación de estilos puede mejorar significativamente la legibilidad y la apariencia profesional. Spire.XLS permite personalizar fuentes, colores, formatos numéricos y ajustar automáticamente el ancho de las columnas mediante la clase CellStyle.

Ejemplo: Aplicación de Estilos y Ajuste Automático de Columnas

import com.spire.xls.*;

public class EstilosExcelCsv {
   public static void main(String[] args) {
       Workbook libroExcel = new Workbook();
       libroExcel.loadFromFile("datos_con_estilos.csv", ",");

       Worksheet hojaPrincipal = libroExcel.getWorksheets().get(0);

       // Crear y aplicar estilo para la cabecera
       CellStyle estiloCabecera = libroExcel.getStyles().addStyle("EstiloEncabezado");
       estiloCabecera.getFont().isBold(true);
       estiloCabecera.getFont().setSize(14f);
       estiloCabecera.setKnownColor(ExcelColors.LightYellow); // Fondo amarillo claro

       // Iterar sobre las columnas de la primera fila para aplicar el estilo de cabecera
       for (int colIndice = 1; colIndice <= hojaPrincipal.getLastColumn(); colIndice++) {
           hojaPrincipal.getCellRange(1, colIndice).setStyle(estiloCabecera);
       }

       // Crear y aplicar estilo numérico a un rango específico de celdas
       CellStyle estiloNumerico = libroExcel.getStyles().addStyle("FormatoNumeros");
       estiloNumerico.setNumberFormat("#,##0.00"); // Formato con separador de miles y dos decimales
       hojaPrincipal.getCellRange("B2:B100").setStyle(estiloNumerico);

       // Establecer una fuente global y ajustar automáticamente el ancho de las columnas
       hojaPrincipal.getRange().getStyle().getFont().setFontName("Arial");
       for (int i = 1; i <= hojaPrincipal.getLastColumn(); i++) { // Corregido a getLastColumn para autoajuste de columnas
           hojaPrincipal.autoFitColumn(i);
       }

       libroExcel.saveToFile("salida_formateada.xlsx", ExcelVersion.Version2013);
       System.out.println("Archivo Excel con estilos guardado en: salida_formateada.xlsx");
   }
}

Para integrar datos en una plantilla Excel preexistente, simplemente cargue el archivo .xlsx de la plantilla y use métodos como insertArray() o setText() para inyectar la información. Tenga en cuenta que los estilos de la plantilla no se aplicarán automáticamente a los datos nuevos, por lo que podría ser necesario configurarlos manualmente.

Consolidación de Múltiples Archivos CSV en un Único Documento Excel

Cuando se gestionan volúmenes de datos o información de diversas fuentes, es frecuente la necesidad de fusionar varios archivos CSV en un solo libro de Excel. Spire.XLS ofrece dos metodologías principales para esta tarea:

  • Importar cada archivo CSV a una hoja de cálculo independiente.
  • Consolidar todos los datos CSV en una única hoja de cálculo.

Método 1: Cada CSV en una Hoja de Cálculo Separada

import com.spire.xls.*;
import java.io.File;

public class FusionarCsvEnHojasSeparadas {
   public static void main(String[] args) {
       // Obtener todos los archivos CSV de un directorio específico
       File[] archivosCsv = new File("directorio_csv/").listFiles((dir, nombre) -> nombre.endsWith(".csv"));
       
       Workbook libroConsolidado = new Workbook();
       libroConsolidado.getWorksheets().clear(); // Limpiar las hojas por defecto

       if (archivosCsv != null) {
           for (File archivoCsv : archivosCsv) {
               Workbook libroTemporal = new Workbook();
               // Cargar cada CSV en un libro temporal
               libroTemporal.loadFromFile(archivoCsv.getAbsolutePath(), ",");
               // Añadir una copia de la primera hoja del libro temporal al libro consolidado
               libroConsolidado.getWorksheets().addCopy(libroTemporal.getWorksheets().get(0));
           }
       } else {
           System.out.println("No se encontraron archivos CSV en el directorio especificado.");
           return;
       }

       libroConsolidado.saveToFile("fusion_multiples_hojas.xlsx", ExcelVersion.Version2016);
       System.out.println("Archivos CSV fusionados en: fusion_multiples_hojas.xlsx");
   }
}

Método 2: Unir Todos los Datos en una Única Hoja de Cálculo

import com.spire.xls.*;
import java.io.File;

public class FusionarCsvEnHojaUnica {
   public static void main(String[] args) {
       // Buscar archivos CSV en el directorio especificado
       File[] archivosCsv = new File("directorio_csv/").listFiles((dir, nombre) -> nombre.endsWith(".csv"));
       
       Workbook libroFusionado = new Workbook();
       libroFusionado.getWorksheets().clear(); // Eliminar hojas predeterminadas
       Worksheet hojaUnicaDestino = libroFusionado.getWorksheets().add("DatosUnificados"); // Crear una nueva hoja para la fusión

       int filaActual = 1; // Fila de inicio para escribir en la hoja de destino
       boolean esElPrimerArchivo = true;

       if (archivosCsv != null) {
           for (File archivoCsv : archivosCsv) {
               Workbook libroTemporal = new Workbook();
               libroTemporal.loadFromFile(archivoCsv.getAbsolutePath(), ",");
               Worksheet hojaOrigen = libroTemporal.getWorksheets().get(0);

               // Si no es el primer archivo, se saltan los encabezados (fila 1)
               int filaInicioLectura = esElPrimerArchivo ? 1 : 2;
               esElPrimerArchivo = false;

               // Copiar datos del archivo CSV actual a la hoja de destino
               for (int f = filaInicioLectura; f <= hojaOrigen.getLastRow(); f++) {
                   for (int c = 1; c <= hojaOrigen.getLastColumn(); c++) {
                       hojaUnicaDestino.getCellRange(filaActual, c).setValue(hojaOrigen.getCellRange(f, c).getText());
                   }
                   filaActual++; // Avanzar a la siguiente fila en la hoja de destino
               }
           }
       } else {
           System.out.println("No se encontraron archivos CSV para fusionar.");
           return;
       }

       libroFusionado.saveToFile("fusion_hoja_unica.xlsx", ExcelVersion.Version2016);
       System.out.println("Archivos CSV fusionados en una sola hoja: fusion_hoja_unica.xlsx");
   }
}

Consejos para la Solución de Problemas

  • Contenido de Excel ilegible o con caracteres extraños: Asegúrese de que sus archivos CSV estén codificados en UTF-8.
  • Columnas desalineadas o formato incorrecto: Verifique que el delimitador utilizado en el método loadFromFile() coincida con el delimitador real de su archivo CSV.
  • Archivos CSV de gran tamaño: Considere dividir los datos en múltiples hojas de cálculo dentro del Excel resultante para mejorar el rendimiento y la manejabilidad.
  • Estructura de archivos CSV inconsistente: Normalice la estructura de los campos o los encabezados de las columnas antes de intentar fusionar archivos con esquemas diferentes.

Preguntas Frecuentes

¿Cómo convierto un archivo CSV a formato XLSX en Java?

Utilice Workbook.loadFromFile("archivo.csv", ",") para cargar el CSV y luego saveToFile("salida.xlsx", ExcelVersion.Version2016) para guardarlo como un archivo .xlsx.

¿Es posible aplicar estilos al Excel generado?

Sí, la clase CellStyle permite configurar propiedades como fuente, color, alineación y formato numérico para las celdas.

¿Puedo insertar datos CSV en una plantilla Excel existente?

Absolutamente. Cargue el archivo de plantilla .xlsx y utilice métodos como setText() o insertDataTable() para inyectar los datos.

¿Cómo puedo fusionar varios archivos CSV en un único archivo Excel?

Puede optar por generar una hoja de cálculo independiente para cada CSV o concaetnar los datos de todos los CSV línea por línea en una sola hoja de cálculo.

Etiquetas: java Spire.XLS CSV Excel Conversión de Archivos

Publicado el 6-23 22:46