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:

package leerXLS;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;

public class Main {

	public static void main(String[] args) throws Exception {

		//
		// An excel file name. You can create a file name with a full
		// path information.
		//
		String filename = "test.xls";
		//
		// Create an ArrayList to store the data read from excel sheet.
		//
		List sheetData = new ArrayList();
		FileInputStream fis = null;
		try {
			//
			// Create a FileInputStream that will be use to read the
			// excel file.
			//
			fis = new FileInputStream(filename);
			//
			// Create an excel workbook from the file system.
			//
			HSSFWorkbook workbook = new HSSFWorkbook(fis);
			//
			// Get the first sheet on the workbook.
			//
			HSSFSheet sheet = workbook.getSheetAt(0);
			//
			// When we have a sheet object in hand we can iterator on
			// each sheet's rows and on each row's cells. We store the
			// data read on an ArrayList so that we can printed the
			// content of the excel to the console.
			//
			Iterator rows = sheet.rowIterator();
			while (rows.hasNext()) {
				HSSFRow row = (HSSFRow) rows.next();
				
				Iterator cells = row.cellIterator();
				List data = new ArrayList();
				while (cells.hasNext()) {
					HSSFCell cell = (HSSFCell) cells.next();
				//	System.out.println("Añadiendo Celda: " + cell.toString());
					data.add(cell);
				}
				sheetData.add(data);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fis != null) {
				fis.close();
			}
		}
		showExelData(sheetData);
	}

	private static void showExelData(List sheetData) {
		//
		// Iterates the data and print it out to the console.
		//
		for (int i = 0; i < sheetData.size(); i++) {
			List list = (List) sheetData.get(i);
			for (int j = 0; j < list.size(); j++) {
				Cell cell = (Cell) list.get(j);
				if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
					System.out.print(cell.getNumericCellValue());
				} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
					System.out.print(cell.getRichStringCellValue());
				} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
					System.out.print(cell.getBooleanCellValue());
				}
				if (j < list.size() - 1) {
					System.out.print(", ");
				}
			}
			System.out.println("");
		}
	}
}

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.

package leerXLS;

import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class EjemploCrearExcel {

    /**
     * Crea una hoja Excel y la guarda.
     * 
     * @param args
     */
   
	public static void main(String[] args) {
        // Se crea el libro
        HSSFWorkbook libro = new HSSFWorkbook();

        // Se crea una hoja dentro del libro
        HSSFSheet hoja = libro.createSheet();

        // Se crea una fila dentro de la hoja
        HSSFRow fila = hoja.createRow(0);

        // Se crea una celda dentro de la fila
        HSSFCell celda = fila.createCell((short) 0);

        // Se crea el contenido de la celda y se mete en ella.
        HSSFRichTextString texto = new HSSFRichTextString("hola mundo");
        celda.setCellValue(texto);

        // Se salva el libro.
        try {
            FileOutputStream elFichero = new FileOutputStream("holamundo.xls");
            libro.write(elFichero);
            elFichero.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

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!

Deja una 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.