Lo mejor de utilizar un lenguaje de programación tan popular como Java es que para cada necesidad hay una librería. El otro día necesitaba recorrer un fichero Excel (como parte de un generador de bots para Xatkit) y empecé a buscar cuál era la mejor manera de procesar ficheros Excel en Java. Hubo un ganador claro, la librería Apache POI, que sirve también para los otros archivos de Microsoft Office. No es la única alternativa pero creedme, no hay ninguna mejor hoy en día. Y si no me creéis, mirad lo fácil que es leer hojas de cálculo con ella.

Instalando Apache POI

Basta con añadir estas dos dependencias a tu fichero pom.xml (para proyectos Maven). Si lo prefieres también te las puedes descargar tú mismo.

         <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

Abriendo el fichero Excel

Sólo tienes que abrir un InputStream al fichero y crear una instancia de la clase WorkBook a partir de ahí. Esta clase es la que te da acceso al contenido del fichero. Por ejemplo, puedes acceder a la primera hoja de cálculo con getSheetAt (fijaros que aquí también contamos a partir de cero).

       File f = new File("PATH\FICHERO.xlsx");
       InputStream inp = new FileInputStream(f);
       Workbook wb = WorkbookFactory.create(inp);
       sheet = wb.getSheetAt(0);

Recorriendo el fichero Excel

Una vez tenemos acceso a la hoja podemos acceder a sus filas, columnas y celdas de una forma muy intuitiva. Por ejemplo éste código os imprimirá el contenido de todas las celdas de la segunda columna de la hoja. Lo que hacemos es recorrer cada fila del excel (hasta llegar al final) y para cada fila acceder a la celda en segunda posición, recuperar su valor e imprimirlo.

 
      Row row = sh.getRow(iRow); //En qué fila empezar ya dependerá también de si tenemos, por ejemplo, el título de cada columna en la primera fila
      while(row!=null) 
      {
          Cell cell = row.getCell(1);  
          String value = cell.getStringCellValue();
          System.out.println("Valor de la celda es " + value);
          iRow++;  
          row = sh.getRow(iRow);
      }

Este código es muy esquemático y no controla todos los errores que nos podemos controlar, por ejemplo, el hecho de qué la celda en una de las filas esté vacía. Apache POI permite indicar si quieres que los vacíos se devuelvan como valores nulos o cadenas vacías (y lo mismo para las celdas inexistentes) para controlar mejor cuando quieres que se pare el recorrido por el Excel.

Modificando el fichero Excel

Igual que podemos leer el archivo, podemos modificarlo. Se puede añadir nuevas filas ( sh.createRow), modificar valores de celdas existentes ( cell.setCellValue ) y todo lo que se te pueda ocurrir. Aquí podéis ver ejemplos de modificación de ficheros Excel en Java.

Espero que este post os sirva para ver hasta qué punto es fácil trabajar con Excel. Algo que seguramente os tocará hacer en algún momento de vuestra vida profesional. Y es que Excel genera controversias (esta es la última) pero sigue siendo una de las mejores opciones para analizar y manipular datos sin tener que ser experto programador, lo que convierte Excel en la opción por defecto en muchas empresas.

Imagen destacada por Mika Baumeister en Unsplash