Manejo de Documentos Excel en Java utilizando Apache POI

Introducción

El manejo de archivos Excel es una tarea común en muchos proyectos de software, especialmente para la gestión de datos estructurados. En Java, la biblioteca Apache POI proporciona una poderosa API para leer, escribir y modificar documentos de Excel (tanto en formato .xls como .xlsx). Este artículo explicará cómo trabajar con documentos Excel en Java utilizando Apache POI, con un ejemplo práctico que incluye la búsqueda de datos y la creación de nuevas hojas.

Configuración del proyecto para usar Apache POI

Para trabajar con Apache POI, primero debemos agregar las dependencias correspondientes en nuestro proyecto. Si estás utilizando Maven, agrega las siguientes dependencias a tu archivo pom.xml:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

Estas dependencias incluyen las clases necesarias para manipular archivos de Excel tanto en formato .xls como .xlsx.

Ejemplo práctico: Búsqueda de datos en un archivo Excel

A continuación, vamos a crear un ejemplo donde abrimos un archivo de Excel, buscamos información basada en criterios específicos, y creamos una nueva hoja con los resultados de la búsqueda.

Código de ejemplo

package excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class EjercicioExcel {

    private final static String FILE_PATH = "vehiculosElectricos.xlsx";
    private static Workbook wb;

    // Método para buscar por marca
    private static void buscarMarca(String marca) {
        Sheet hoja = wb.getSheetAt(0);  // Tomamos la primera hoja del documento
        int numFila = 1;  // Empezamos desde la segunda fila (índice 1)
        Row fila = hoja.getRow(numFila);

        // Muestro las ubicaciones de los puntos de carga de la marca especificada
        System.out.println("PUNTOS DE RECARGA DE " + marca + " EN CASTILLA Y LEÓN");
        while (fila != null) {
            Cell celdaBusqueda = fila.getCell(2);  // La marca se encuentra en la tercera columna
            if (celdaBusqueda != null && celdaBusqueda.getStringCellValue().contains(marca)) {
                System.out.println("----> " + fila.getCell(0).getStringCellValue() + " - " +
                        fila.getCell(1).getStringCellValue());
            }
            fila = hoja.getRow(++numFila);
        }
    }

    // Método para buscar por ciudad y crear una nueva hoja en el Excel
    private static void buscarCiudad(String ciudad) {
        Sheet hoja = wb.getSheetAt(0);  // Tomamos la primera hoja del documento
        Sheet nuevaHoja = wb.createSheet(ciudad);  // Creamos una nueva hoja con el nombre de la ciudad
        int numFila = 1, newNumFila = 0;  // Empezamos desde la segunda fila
        Row fila = hoja.getRow(numFila);

        // Muestro y almaceno las ubicaciones de los puntos de carga en la ciudad
        System.out.println("\nPUNTOS DE RECARGA EN " + ciudad);
        while (fila != null) {
            Cell celdaBusqueda = fila.getCell(1);  // La ciudad está en la segunda columna
            if (celdaBusqueda != null && celdaBusqueda.getStringCellValue().contains("(" + ciudad + ")")) {
                System.out.println("----> " + fila.getCell(0).getStringCellValue() + " - " +
                        fila.getCell(1).getStringCellValue());

                // Copiamos la fila a la nueva hoja
                Row newFila = nuevaHoja.createRow(newNumFila++);
                newFila.createCell(0).setCellValue(fila.getCell(0).getStringCellValue());
                newFila.createCell(1).setCellValue(fila.getCell(1).getStringCellValue());
            }
            fila = hoja.getRow(++numFila);
        }

        try {
            // Guardamos los cambios en el archivo de Excel
            wb.write(new FileOutputStream(new File(FILE_PATH)));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            // Abrimos el archivo Excel
            wb = new XSSFWorkbook(new FileInputStream(new File(FILE_PATH)));

            // Llamamos a los métodos para buscar por marca y ciudad
            buscarMarca("IBERDROLA");
            buscarCiudad("ZAMORA");

            // Cerramos el archivo
            wb.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explicación del código:

  1. Apertura del archivo Excel:
    Se utiliza XSSFWorkbook para trabajar con archivos .xlsx. El archivo es cargado en memoria a través de FileInputStream.
  2. Método buscarMarca(String marca):
    Este método busca los puntos de recarga asociados a una marca específica dentro de la primera hoja del archivo Excel. Recorre las filas de la hoja, busca coincidencias con la marca en la tercera columna y muestra los resultados.
  3. Método buscarCiudad(String ciudad):
    Este método busca los puntos de recarga en una ciudad determinada y crea una nueva hoja en el archivo Excel con el nombre de la ciudad. Además, copia las filas correspondientes a esa ciudad en la nueva hoja.
  4. Escritura en el archivo Excel:
    Después de agregar la nueva hoja con los resultados de la búsqueda por ciudad, los cambios se guardan en el archivo original utilizando FileOutputStream.
  5. Cierre del archivo:
    Es importante cerrar el archivo después de terminar la manipulación para liberar los recursos.

Conclusión

Apache POI es una excelente herramienta para trabajar con documentos Excel en Java. En este artículo, vimos cómo abrir un archivo Excel, buscar información por criterios específicos, y cómo modificar el archivo agregando nuevas hojas. La biblioteca es muy flexible y ofrece muchas funcionalidades para trabajar con hojas de cálculo, desde operaciones simples hasta manipulación avanzada de datos. Con este ejemplo práctico, puedes empezar a aplicar Apache POI en tus proyectos para gestionar documentos Excel de manera eficiente.

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad