Blog Informáticos Murcia

Desde Murcia hacia el resto del mundo.

Blog Informáticos Murcia

Desde Murcia hacia el resto del mundo.

Vamos a leer un archivo Excel desde Java utilizando la librería POI.

Nos podemos descargar la librería desde su página http://www.apache.org/dyn/closer.cgi/poi/

En mi caso me he descargado la versión «poi-bin-3.10-FINAL-20140208.zip»
Descomprimimos y observamos que tenemos unos jars que añadiremos posteriormente a nuestro proyecto.

descomprimido_poi-bin-3.10-FINAL-20140208.zip

Creamos un nuevo proyecto en Eclipse o en el entorno de desarrollo que utiliceis.

proyecto_leerXLS

 

Ahora añadiremos las librerias POI para poder leer el Excel, para ello pulsamos con el botón derecho sobre nuestro proyecto, propiedades. Seguidamente en Java Build Path y en la pestaña de Libraries añadimos los jar de la libreria POI. Una vez añadidas pulsamos en OK y ya tenemos las librerias en nuestro proyecto.

añadir_JAR_POI

Creamos un excel de ejemplo y lo guardamos dentro de nuestro proyecto

excel_test_java

leer_test_java_proyecto

Ahora creamos el Main.java con el siguiente código:

01package leerXLS;
02 
03import java.io.FileInputStream;
04import java.io.IOException;
05import java.util.ArrayList;
06import java.util.Iterator;
07import java.util.List;
08import org.apache.poi.hssf.usermodel.HSSFCell;
09import org.apache.poi.hssf.usermodel.HSSFRow;
10import org.apache.poi.hssf.usermodel.HSSFSheet;
11import org.apache.poi.hssf.usermodel.HSSFWorkbook;
12import org.apache.poi.ss.usermodel.Cell;
13 
14public class Main {
15 
16    public static void main(String[] args) throws Exception {
17 
18        //
19        // An excel file name. You can create a file name with a full
20        // path information.
21        //
22        String filename = "test.xls";
23        //
24        // Create an ArrayList to store the data read from excel sheet.
25        //
26        List sheetData = new ArrayList();
27        FileInputStream fis = null;
28        try {
29            //
30            // Create a FileInputStream that will be use to read the
31            // excel file.
32            //
33            fis = new FileInputStream(filename);
34            //
35            // Create an excel workbook from the file system.
36            //
37            HSSFWorkbook workbook = new HSSFWorkbook(fis);
38            //
39            // Get the first sheet on the workbook.
40            //
41            HSSFSheet sheet = workbook.getSheetAt(0);
42            //
43            // When we have a sheet object in hand we can iterator on
44            // each sheet's rows and on each row's cells. We store the
45            // data read on an ArrayList so that we can printed the
46            // content of the excel to the console.
47            //
48            Iterator rows = sheet.rowIterator();
49            while (rows.hasNext()) {
50                HSSFRow row = (HSSFRow) rows.next();
51                 
52                Iterator cells = row.cellIterator();
53                List data = new ArrayList();
54                while (cells.hasNext()) {
55                    HSSFCell cell = (HSSFCell) cells.next();
56                //  System.out.println("Añadiendo Celda: " + cell.toString());
57                    data.add(cell);
58                }
59                sheetData.add(data);
60            }
61        } catch (IOException e) {
62            e.printStackTrace();
63        } finally {
64            if (fis != null) {
65                fis.close();
66            }
67        }
68        showExelData(sheetData);
69    }
70 
71    private static void showExelData(List sheetData) {
72        //
73        // Iterates the data and print it out to the console.
74        //
75        for (int i = 0; i < sheetData.size(); i++) {
76            List list = (List) sheetData.get(i);
77            for (int j = 0; j < list.size(); j++) {
78                Cell cell = (Cell) list.get(j);
79                if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
80                    System.out.print(cell.getNumericCellValue());
81                } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
82                    System.out.print(cell.getRichStringCellValue());
83                } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
84                    System.out.print(cell.getBooleanCellValue());
85                }
86                if (j < list.size() - 1) {
87                    System.out.print(", ");
88                }
89            }
90            System.out.println("");
91        }
92    }
93}

Ejecutamos y comprobamos que ha leído nuestro archivo Excel.

resultado_ejecución_leer_excel_java

 

 

 

 

 

 

Ejemplo de escribir en un Excel que se guarda en la ruta del proyecto.

01package leerXLS;
02 
03import java.io.FileOutputStream;
04 
05import org.apache.poi.hssf.usermodel.HSSFCell;
06import org.apache.poi.hssf.usermodel.HSSFRichTextString;
07import org.apache.poi.hssf.usermodel.HSSFRow;
08import org.apache.poi.hssf.usermodel.HSSFSheet;
09import org.apache.poi.hssf.usermodel.HSSFWorkbook;
10 
11public class EjemploCrearExcel {
12 
13    /**
14     * Crea una hoja Excel y la guarda.
15     *
16     * @param args
17     */
18    
19    public static void main(String[] args) {
20        // Se crea el libro
21        HSSFWorkbook libro = new HSSFWorkbook();
22 
23        // Se crea una hoja dentro del libro
24        HSSFSheet hoja = libro.createSheet();
25 
26        // Se crea una fila dentro de la hoja
27        HSSFRow fila = hoja.createRow(0);
28 
29        // Se crea una celda dentro de la fila
30        HSSFCell celda = fila.createCell((short) 0);
31 
32        // Se crea el contenido de la celda y se mete en ella.
33        HSSFRichTextString texto = new HSSFRichTextString("hola mundo");
34        celda.setCellValue(texto);
35 
36        // Se salva el libro.
37        try {
38            FileOutputStream elFichero = new FileOutputStream("holamundo.xls");
39            libro.write(elFichero);
40            elFichero.close();
41        } catch (Exception e) {
42            e.printStackTrace();
43        }
44    }
45}

 

Notas:

  • Workbook crea el Excel con el que vamos a trabajar (tanto para leer como para crear uno nuevo).
  • HSSFSheet son las Hojas del Excel, como mínimo un Excel debe de tener al menos una hoj.a
  • HSSFRow son las filas de la hoja del Excel.
  • HSSFCell son las celdas de la celda/columna.

21 comentarios en «Leer o escribir en Excel desde Java»

  1. No me lee los archivos estoy usando office 2007 no se que pase, ya importe todos los JAR solo me dices que no lo encuentra pero lo tengo en la misma ruta que tu no se a que se deba!.

    1. Yo tenia el mismo problema, con la version actual de poi 3.12 … solo de pueden leer archivos doc, xls, versiones anteriores a 2007, buscando en internet encontré que debes tener POI mayor a 3.5 pero menor a 3.9 para poder leerlos

  2. Una pregunta, sabrás si se pueden leer las celdas en blanco, en este momento, si tengo una celda en blanco se la brinca dato 1 | dato 2 | | | | dato6, solo me aparecen los que tienen información y tambien necesito saber que celda esta en blanco.

    Gracias de antemano 😀

    1. Yo tambien estoy buscando una solucion a este inconveniente por ahora solo hice q lo leyera si la celda esta pintada o tiene fondo. Si alguien encuentra una solucion se lo agradeceria

  3. Una pregunta, sabrás si se puede crear checkbox con esta librería ya pude crear el archivo pero ahora me piden que tenga checkbox. Si me pudieras ayudar te lo agradecería mucho.

    1. Hola Cristina, lo siento no conozco la forma de hacer lo que me dices. Hace tiempo que no utilizo esta libreria.

    2. Saludos cristina, estoy en las mismas que tu estuviste necesitar crear un checkbox. Podrías indicarme si lo conseguiste y si es así como?. Agradecería tu ayuda.

      1. Podríais crear un campo que tenga una validación de datos de «Sí» y «No» y que luego al leer ese campo os ponga un bool a true o false. Al usuario final le va a dar igual si es un ckeckbox o un Y/N de toda la vida. Al fin y al cabo hace la misma función.

        Salu2

  4. Buenas tardes
    En mi proyecto ya lee bien el archivo pero ahora necesito subir esa informacion que ya leeyo a una Base de datos en Oracle SQL Server, alguien podria ayudarme con eso ?
    Saludos agradecere su ayuda.

  5. al momento de ejecutar el .xls recorre el ciclo while, pero cuando termina el programa arroja este error «Exception in thread «main» java.lang.IllegalStateException: Cannot get a text value from a numeric cell».
    tienes alguna solución para leer números y mostrarlos despúes
    Gracias

    1. Buenas, una vez que lo has leido puedes enviarselo a Arduino de varias formas..mediante socket…json…xml.. Ya tienes que ver como implementarlo.

  6. Hola! cómo puedo utilizar el ejemplo para crear un archivo excel con los datos que extraigo desde una base de datos sql? realizo la conexión, e intento implementar esta solución en mi proyecto pero no me ha funcionado. (El resultado de la consulta lo muestre en excel) Gracias!!!!! (Java Version 1.7 netbeans ide 8.0.2, librerías POI 3.13, Excel 2013)

    Agradecería la ayuda!

Responder a Roberto Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.