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.
Creamos un nuevo proyecto en Eclipse o en el entorno de desarrollo que utiliceis.
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.
Creamos un excel de ejemplo y lo guardamos dentro de nuestro 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.
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.
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!.
Hola, posiblemente tu fichero que estas intentado leer esta en formato .docx en ver de .doc
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
Para poder leer el formato de Excel xlsx es necesario utilizar otra libreria org.apache.poi.xssf
Muchas gracias, me resolvió muchas dudas y ne fue muy útil el tutorial.
Saludos
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 😀
hola amigo, yo tengo el mismo problema sera que encontraste la solución?
gracias
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
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.
Hola Cristina, lo siento no conozco la forma de hacer lo que me dices. Hace tiempo que no utilizo esta libreria.
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.
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
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.
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
Cambia el tipo de dato en la celda del archivo de excel o parsea la celda a String
Hola, muy buena la información pero me gustaría saber si los datos que se leen se pueden enviar a otro programa como Arduino.
Buenas, una vez que lo has leido puedes enviarselo a Arduino de varias formas..mediante socket…json…xml.. Ya tienes que ver como implementarlo.
este ejemplo funciona con Exel 2010??
Si te das cuenta en el ejemplo uso el office 2007.
Funciona para archivos excel con extensión .xls independientemente de la version de office en que se edite.
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!