Leer un fichero Excel desde Java
Muchas veces puede resultar interesante interactuar con hojas Excel desde nuestra aplicación Java. Ésto es lo que nos permite el API JExcel. Se trata de una librería opensource e independiente de otras librerías que permite leer, crear y editar ficheros de excel. En este ejemplo simplemente se muestra cómo leer un archivo .xls.
Descargar e importar la librería JExcel.
Nos descargamos la librería desde aquí:
http://sourceforge.net/projects/jexcelapi/files/
Luego simplemente incorporamos a nuestro proyecto el archivo "jxl.jar".
Lo haremos pinchando con el botón derecho sobre la carpeta del proyecto; pinchamos en Propiedades; opción "Java Build Path"; pestaña Librerías; finalmente pulsamos en "Add External JAR" y seleccionamos el archivo jxl.jar
La aplicación
Lo que hace es lo siguiente:
Recorre cada hoja del archivo excel. Dentro de cada hoja, recorre todas las columnas de cada fila del archivo excel y muestra su contenido en pantalla.
Para probar la aplicación:
Hay que colocar un archivo excel de prueba con datos. Yo lo he puesto en la misma carpeta que el archivo java con el nombre "archivoPrueba.xls".
A continuación se muestra el código del archivo java:
import jxl.*;
import java.io.*;
public class ReadExcel {
private void leerArchivoExcel(String archivoDestino) {
try {
Workbook archivoExcel = Workbook.getWorkbook(new File(
archivoDestino));
System.out.println("Número de Hojas\t"
+ archivoExcel.getNumberOfSheets());
for (int sheetNo = 0; sheetNo < archivoExcel.getNumberOfSheets(); sheetNo++) // Recorre
// cada
// hoja
{
Sheet hoja = archivoExcel.getSheet(sheetNo);
int numColumnas = hoja.getColumns();
int numFilas = hoja.getRows();
String data;
System.out.println("Nombre de la Hoja\t"
+ archivoExcel.getSheet(sheetNo).getName());
for (int fila = 0; fila < numFilas; fila++) { // Recorre cada
// fila de la
// hoja
for (int columna = 0; columna < numColumnas; columna++) { // Recorre
// cada
// columna
// de
// la
// fila
data = hoja.getCell(columna, fila).getContents();
System.out.print(data + " ");
}
System.out.println("\n");
}
}
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
public static void main(String arg[]) {
ReadExcel excel = new ReadExcel();
excel.leerArchivoExcel("archivoPrueba.xls");
}
}
Fuentes:
http://www.mindfiresolutions.com/How-to-read-an-excelsheet-from-Java-217.php
Tweet
De lo más útil sobre el tema que he encontrado.
Muchas gracias!
Un saludo.
Me alegra que te sirviera.
Gracias a tí por comentar.
gracias me has salvado la vida de verdad gracias funciona a la perfección y fácil de entender
De nada, vuelve por el blog cuando quieras.
Saludos.
una duda con esto como le haces para que en el documento de excel que se crea acepte acentos y la letra ñ, agradeceria infinitamente que pudieras responder
Hola Rtome.
En este ejemplo no se crea ningún documento. Simplemente se lee desde java un archivo excel que previamente he creado.
No obstante, la librería JExcel te premite escribir en hojas excel. Puedes echarle un vistazo al siguiente ejemplo:
http://www.java-tips.org/other-api-tips/jexcel/how-to-create-an-excel-file.html
No creo que tengas problemas con los acentos y la ñ, pero si tienes algún inconveniente, coméntamelo y trataré de ayudarte.
Saludos.
Gracias. el código que muestras es efectivo y va directo al punto.
felicidades
De nada Leo. Me alegro de que te fuera útil el post.
Saludos.
Excelente codigo, es muy facil de entender y era justo lo q andaba buscando. gracias!!
Gracias a tí por comentar.
Saludos.
Hola perdon estoy iniciando en el mundo de java y estoy trabajando este ejemplo desde netbeans, solo que me sale un error en esta parte
Workbook archivoExcel = Workbook.getWorkbook(new File(archivoDestino));
Me dice algo de que la clase no existe
Buenas.
Ese error ocurre porque no están importadas las librerías. Arriba, en la parte "Descargar e importar la librería JExcel" explico cómo hacerlo en Eclipse. En Netbeans no lo he intentado, pero no debe ser muy complicado.
También tienes que asegurarte en el código de que haces los import:
import jxl.*;
import java.io.*;
Si sigues teniendo dificultades, no dudes en preguntarme.
Saludos.
Me gusta un utiliza de un foro de Internet. Este programa asistiò mucho y rapidamente, ademas puede determinar todo complijado por par minutos y este situation tambien a mi todo de ver - recuperar archivo de excel.
Buenas.
No entiendo mucho lo que dices pero parece que te ha servido este posts, de lo cual me alegro.
Saludos.
Hola Felipe,
Mira, yo estoy tratando de trabajar con el ejemplo que publicaste, en verdad es muy bueno. Ya importe las librerías e hice en código en Eclipse y no presenta error cuando compilo. Sin embargo, quería preguntarte dónde es exactamente que se debe poner el archivo de excel porque lo he puesto en la carpeta de Java y me genera el siguiente error: "java.io.FileNotFoundException: archivoPrueba.xls (El sistema no puede hallar el archivo especificado)" y nose dónde más ponerlo.
Te agradecería mucho si me pudieras ayudar.
Gracias y éxitos.
Hola Felipe,
Ya supe como hacerlo. Muchas Gracias.
Psdta: Lo que publicas en tu blog muy útil y fácil de hacer, felicitaciones. :)
Hola Carolita.
Agradezco mucho tus felicitaciones. Si tienes alguna otra consulta, no dudes en preguntar.
Saludos.
La verdad si que se tienen problemas con la ñ al menos. Cuando trato de obtener el contenido de una celda que tiene ñ me devuelve u simple cuadrito. No se si sea la versión del jxl que tengo. Conoces alguna forma para resolver esto??. Gracias por tu aporte.
Hola rodanmuro.
He probado el ejemplo de nuevo guardando el fichero excel con extensión "Libro de Excel 97-2003(*.xls)" y con la versión 2.6.12 de jexcel: me ha funcionado correctamente, tanto la ñ como las palabras que contenían tilde. Compruébalo de nuevo, porque quizás sea un tema de la codificación del excel o de la versión del jexcel.
Espero que te funcione. Cualquier duda que tengas, pregúntame.
Saludos y Feliz Navidad!
Hola,
En mi caso, para que me lea/escriba bien eñes, acentos y demás caracteres, configuro el WorkbookSettings de esta forma:
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setEncoding("ISO-8859-1");
wbSettings.setLocale(new Locale("es", "ES"));
wbSettings.setExcelDisplayLanguage("ES"); wbSettings.setExcelRegionalSettings("ES"); wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
Saludos!
Hola.
Gracias por tu aportación y espero que le sirva a alguien. Como dije anteriormente, yo no tuve ningún problema con los acentos y las eñes, no tuve que configurar nada.
Saludos.
Buen dia:
quisiera saber si puedo leer el contenido de varios exceles y guardarlos en un array usando esta libreria o si solo me lee un archivo
Hola Elisa.
Puedes abrir todos los archivos excel que quieras. Si usamos el ejemplo que he puesto, tendrías que llamar al método tantas veces como archivos quieras leer, pasándole como argumento el nombre del archivo excel. Ejemplo:
public static void main(String arg[]) {
ReadExcel excel = new ReadExcel();
excel.leerArchivoExcel("archivoExcel1.xls");
excel.leerArchivoExcel("archivoExcel2.xls");
excel.leerArchivoExcel("archivoExcel3.xls");
// ...
}
Saludos.
Saludos Felipe, creo q no t daba problemas con las ñ ni los acentos porq usas SO windows, si usaras Linux si t diera problemas con las ñ y acentos y es donde entra la configuracion posteada por "anónimo" (se ve raro esto jajajaja), q es funciona a la perfección
Hola.
Quizás tengas razón, ya que Eclipse sólo lo tengo instalado en Windows y por tanto, el ejemplo sólo lo he probado ahí. Así que gracias por apuntar el problema y por indicar la solución. Espero que le sirva a más gente.
Saludos.
Hola, buenos días he probado el codigo en Oracle WebLogic y me da el siguiente error:
jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.(CompoundFile.java:116)
at jxl.read.biff.File.(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:221)
at jxl.Workbook.getWorkbook(Workbook.java:198)
at ReadExcel.readExcelSheet(ReadExcel.java:11)
at ReadExcel.main(ReadExcel.java:36)
Por favor necesito ayuda!!
Hola.
Éste ejemplo se ha probado como una aplicación Java y desde el IDE Eclipse.
¿Tú como estás ejecutando este código, desde un archivo .java o un .jsp? ¿la aplicación la vas a ejecutar desde el lado del cliente o desde el servidor?
Estas consideraciones son importantes, ya que el código requerirá de algunas modificaciones según desde donde se ejecute.
Saludos.
De tantos tutoriales en internet, este fue el mejor! Gracias!
Hola Mizo.
Muchas gracias a tí por comentar.
Saludos.
hola
Tengo problemas con lo de la ñ y las tíldes.
Donde se debe poner el código del WorkbookSettings que explican arriba?....muchas gracias de antemano
Hola.
Según algunos comentarios, existen errores con la ñ y las tildes si estás utilizando Linux (supongo que por la versión o el idioma del JDK instalado). Para solucionar eso, puedes intentar (tal y como indican en un comentario) sustituir esta línea:
Workbook archivoExcel = Workbook.getWorkbook(new File(
archivoDestino));
Por estas líneas:
WorkbookSettings wbSettings = new WorkbookSettings(new File(
archivoDestino));
wbSettings.setEncoding("ISO-8859-1");
wbSettings.setLocale(new Locale("es", "ES"));
wbSettings.setExcelDisplayLanguage("ES"); wbSettings.setExcelRegionalSettings("ES"); wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
Yo no lo he probado, así que hazlo tu y nos cuentas si te ha funcionado.
Saludos.
Waoo me salvaste la vida ... usaste metodos que no conocia ya yo me iba a erredar para contar la filas y columnas ....Bueno es que soy nuevo probando el JExcelapi ... ahora me han dejado un proyect que tiene que ver con exportar datos de excel a java(suerte que solo se tiene que leer los datos y no escribirlos) ... muy bueno tus aportes, Felicitaciones ...
Ahora tengo una duda no se si es posible exportar las graficas que se generan en excel hacia java para mostrarlos???
Gracias viejo...muy buen aporte..lo buscaba desde hace ratooooooooooooooo
Hola David.
No se si se pueden exportar las gráficas desde el archivo excel hacia la aplicación Java. Yo creo que lo mejor es que apartir de los datos que capturas en la aplicación Java, construyas los gráficos. Te recomiendo la librería JFreeChart.
Para Anónimo: me alegro de que te sirviera.
Saludos a los dos.
Hola david me sale el sgte error:
java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"
Sabes porque peude ser?
Saludos
Hola.
A mí nunca me ha aparecido este error. ¿Estás usando Ubuntu?. Si es así, aquí se propone una solución:
http://cirovladimir.wordpress.com/2009/09/11/java-bad-version-number-in-class-file/
Parece ser que al actualizar el JDK desde Ubuntu, Eclipse no encuentra el JRE. En ese artículo explica como solucionarlo. Dime si has podido arreglarlo o si tenemos que buscar otra solución.
Saludos.
Hola, muchas gracias. Funciono perfecto.
Estoy trabajando en una aplciacion que leear datos de una planilla excel, los reuna y luego los inserte en una planilla ya creada en las celdas que yo necesite.
Me recomiendas algun tutorial para guiarme?
O algun metodo facil para escribir en un excel ya existente?
Muchas gracias!
Hola John.
He encontrado este PDF que lo explica de forma clara y sencilla:
http://www.balearsinnovacio.com/blog/wp-content/uploads/2008/05/jexcelapi.pdf
Mira el apartado "Modificación de hoja de cálculo" para abrir un documento ya existente. Y para modificarlo mira el apartado "Creación de hoja de cálculo", en el cual aparece un ejemplo de utilización del método sheet.addCell().
Para más detalles, puedes consultar la API aquí: http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/write/WritableSheet.html
Si tienes alguna duda, coméntamelo.
Saludos.
Buenas Felipe:
Me da el siguiente error y no tengo Ubuntu, tengo WinXP professional, pero me da error de todas formas!
java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"
Sabes a que puede ser debido? lo metí dentro de un proyecto al azar que tengo y la versión de mi JDK es la 1.5.
Muchas gracias!
Hola, como podria usar este codigo pero mantiendo el archivo excel fuera de la carpeta del proyecto, por ejemplo: quisiera leer el archivo que se genera por una macro y se guarda en el escritorio, como podria indicar al programa la direccion del archivo excel que esta en el escritorio?
Respondo a los dos últimos comentarios:
Penúltimo comentario: Ese error aparece cuando el código se ejecuta sobre un JDK que no es compatible con otro JDK desde el que se creó. Yo lo he ejecutado sin problemas desde Windows con la versión 1.6 de Java. Yo desinstalaría el JDK que tienes e instalaría otro más actual. Asegúrate de que no tienes ningún JDK por ahí perdido que te esté dando problemas.
Último comentario: Depende del sistema operativo en el que estés. Si estás en Windows tendrías que poner ésto en la línea correspondiente:
excel.leerArchivoExcel("C:\Documents and Settings\\Escritorio\archivoPrueba.xls");
Si estás en Ubuntu:
excel.leerArchivoExcel("/home//Escritorio/archivoPrueba.xls");
Si teneis cualquier duda más, podeis comentármelo.
Saludos.
Hola, gracias por tu respuesta, de verdad me ha sido de gran ayuda este codigo, soy quien hizo el comentario para indicar la direccion del archivo excel, ciertamente estoy con windows 7 y ya lo intente de esa manera que me indicas pues fue lo mas logico que se me ocurrio al momento, pero no lo leyo.. Alguna idea de cual pudiese ser el motivo?.
Gracias nuevamente!
Hola.
Si estás en Windows 7 puedes probar así:
excel.leerArchivoExcel("C:\Users\nombre_de_usuario\Desktop\archivoPrueba.xls");
Sustituyendo nombre_de_usuario por tu nombre de usuario. Si la unidad en la que tienes carpeta personal no está en la unidad C, debes de poner la correspondiente.
Espero que te sirva.
Saludos.
Hola.
Fijate que quiero mandar cada dato de cada celda como parametro pero al momento de mandarlo a un metodo en el cual quiero irlos almacenando, no da lugar a hacerlo, al momento de correrlo no me los lee y no entra al try...
Help me plis.
Hola sabran como puedo saber el nombre de un rango de la hoja de excel con java??
Saludos
Respondo a los dos últimos comentarios:
Penúltimo comentario:
Por favor, muéstrame un fragmento de tu código donde pueda ver qué método estás utilizando para almacenar los datos. También el código donde llamas al método leerArchivoExcel(String archivoDestino). ¿Has hecho un seguimiento de tu código para saber por qué no entra al try?.
Último comentario:
El método Workbook.getRangeNames() devuelve una lista de los nombres de Rangos de ese archivo excel. Creo que es lo que pides. Si no es así, puedes comentármelo.
Saludos a los dos.
gracias amigo en efecto es lo que necesitaba, sabrás como puedo evitar este error:
Error: jxl.read.biff.BiffException: Unable to recognize OLE stream
jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.(CompoundFile.jav a:116)
at jxl.read.biff.File.(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:268)
at jxl.Workbook.getWorkbook(Workbook.java:253)
at com.ramco.rvw.pl.ExcelImport.main(ExcelImport.java :24)
no se si me puedas ayudar por favor me urge.
BAztantee buenoooo!! graciazz :D
Hola Verónica.
¿Qué versión tiene el archivo excel que quieres leer?. Parece ser que este error aparece con la versión 2007. Guarda tu archivo como "Libro de Excel 97-2003(*.xls)" e inténtalo de nuevo. Si sigues teniendo problemas, no dudes en comentármelo.
Anónimo, gracias a tí por comentar.
Saludos a los dos.
Hola a todos, Excelente Blog.
Me ha servido de mucho la información que he encontrado aquí, pero tengo un error con las tildes y las eñes, al tratar de usar la siguiente linea:
WorkbookSettings wbSettings = new WorkbookSettings(new File(
archivoDestino));
Me sale un error diciendo que el constructor no existe.
Alguien me puede ayudar???
SO: Win7
JDK: 1.6 update 27
Netbeans 6.9.1
Versión JExcel: 2.6.12
Hola a todos.
La forma correcta de corregir el error de las tildes es usando el siguiente código:
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setEncoding("ISO-8859-1");
wbSettings.setLocale(new Locale("es", "ES"));
wbSettings.setExcelDisplayLanguage("ES");
wbSettings.setExcelRegionalSettings("ES");
wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
Workbook archivoExcel = Workbook.getWorkbook(new File("C:/rutaArchivo.xls"),wbSettings);
ATT: Victor
Hola Víctor.
El problema de las tildes y las eñes se soluciona con el código que han puesto en el comentario anterior.
La siguiente línea es incorrecta y por eso te da ese error de compilación:
WorkbookSettings wbSettings = new WorkbookSettings(new File(archivoDestino))
Pido disculpas porque lo indiqué mal en un comentario anterior.
Saludos a los dos.
Hola a todos,
No conoces una herramienta que lea Excel 2010?
Porque la extensión xlsx no me la permite utilizar. No puedo usar el POI de Apache porque mi servidor es GlassFish.
Saludos a todos
Hola Guillermo.
Según he leido aquí https://groups.google.com/a/teamdev.com/group/jexcel-forum/browse_thread/thread/6cee1b1230f7dc74?pli=1 , JExcel da soporte a archivos excel 2010, aunque no lo he probado. Puedes explicarme más específicamente qué inconvenientes te surgen al utilizar JExcel y si el servidor GlassFish supone alguna limitación para ello. Intentaré ayudarte.
Saludos.
hola.
Que gran aporte, gracias por compartirlo. Tengo una duda, si trabajo tablas dinamicas, puedo pasar esta informacion tambien.
Hola.
No sabría darte una respuesta 100% veraz porque no lo he intentado. Es una buena pregunta. No obstante, te animo a que lo intentes y lo compartas con todos nosotros. Si lo prefieres, puedes enviarme tu hoja excel por correo electrónico y así poder probarlo yo mismo.
Saludos.
Muchas gracias!
De mucha utilidad, ya me dieron ganas de travesear esa librería a ver que le encuentro.
Sigue adelante con tu blog, espero que continúes posteando acerca de java
Hola Migue.
Gracias por tu comentario, seguro que seguiré escribiendo posts de Java.
Saludos.
muy buenisimo el aporte aprendi muchi ,, gracias manes. :D
me funciono del modo :
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setEncoding("ISO-8859-1");
wbSettings.setLocale(new Locale("es", "ES"));
wbSettings.setExcelDisplayLanguage("ES");
wbSettings.setExcelRegionalSettings("ES");
wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
Workbook archivoExcel = Workbook.getWorkbook(new File("C:/rutaArchivo.xls"),wbSettings);
ATT: Victor
Nunca había hecho interactuar java con excel, Muy Buen post
Hola Felipe, muchas gracias por este gran aporte, en mi caso me sale lo siguiente cuando lo ejecuto
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(Unknown Source)
at jxl.Workbook.getWorkbook(Workbook.java:213)
at jxl.Workbook.getWorkbook(Workbook.java:198)
at ReadExcel.leerArchivoExcel(ReadExcel.java:11)
at ReadExcel.main(ReadExcel.java:49)
Ahora me sale lo siguiente:
Command format: Demo [-unicode] [-csv] [-hide] excelfile
Demo -xml [-format] excelfile
Demo -readwrite|-rw excelfile output
Demo -biffdump | -bd | -wa | -write | -formulas | -features | -escher | -escherdg excelfile
Demo -ps excelfile [property] [output]
Demo -version | -logtest | -h | -help
Me sale "OUT MEMORY" cuando trato de leer o escribir un archivo excel de mas de 100 filas, como puedo solucionar este problemita.
Hola a todos.
Victor: me alegra de que te sirviera.
Jeison Nisperuza: muchas gracias.
Anónimo: Espero que hayas solucionado los errores que te aparecían en tus dos primeros comentarios (Si no es así, coméntamelo). Sobre el mensaje "OUT MEMORY", lo he buscado y la solución parece ser ésta:
WorkbookSettings wbSetting = new WorkbookSettings();
wbSetting.setUseTemporaryFileDuringWrite(true);
WritableWorkbook wbook = Workbook.createWorkbook(new File("XYZ.xls"wbSetting);
Lo que se hace es usar un archivo temporal durante la generación del wokbook. Si no se hace eso, toda la operación se realiza utilizando la memoria. Por eso te aparece ese error. Pruébalo y dinos si se te solucionó el problema.
Saludos.
buenos días, tengo win 7, uso net beans y probando el programa me sale el siguiente error: jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.(CompoundFile.java:116)
at jxl.read.biff.File.(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:221)
at leerexcelfile.LeerExcelFile.leerArchivoExcel(LeerExcelFile.java:27)
at leerexcelfile.LeerExcelFile.main(LeerExcelFile.java:60)
No se como arreglarlo y ya están las librerías registradas e incluidas en el proyecto.
Gracias
Hola Juan.
¿Qué tipo de archivo excel estás intentando leer? ¿Los has guardado como Libro de Excel (*.xlsx) o como Libro de Excel 97-2003 (*.xls)?. Quizás sea ese el problema.
Saludos.
Hola, necesito leer 2 ó mas archivos de excel a través de un programa en java, pero ademas necesito generar otro con el resultado del cruce de los anteriores a través de una key que se especifique... Soy nuevo en java, y te agradecería me pudieras orientar como poder hacerlo.
Hola Gonzalo.
¿En qué consiste el cruce de los dos archivos? Pon algún ejemplo con datos reales para que pueda ayudarte.
Saludos.
Hola muy bueno el aporte pero me sale el error que no encuentra el archivo de excel pese a que lo tengo guardado en la mis carpeta donde esta el .java.
Agradezco su colaboración
Hola.
Si con el código de este ejemplo no te encuentra el fichero excel, puedes intentar indicar la ruta de forma absoluta. Ejemplo:
excel.leerArchivoExcel("/home/usuario/archivoPrueba.xls");
ó
excel.leerArchivoExcel("C:\\archivoPrueba.xls");
Si tienes alguna duda, puedes preguntarme.
Saludos.
hola
leer pero no me lee los decimales completos
Hola Alfredo.
Indica cual es tu caso concreto, qué valores estás intentando leer. Dame más datos para que pueda ayudarte.
Saludos.
hola estoy tabajando en u proyecto y me funciono super pero no me lee los archivos .xlsx y .xlsm
podir ayudarme con esto, es importante para mi
cortesía de CODESA S.A.
ya me ayudaron a solucionarla
les dejo las pag de donde se saco la info que se uso para los que les interese.
http://javerosanonimos.blogspot.com/2011/12/leer-archivos-excel-xlsx.html
cuando intentan abrir un archivo xlsx o xlsm muy grande, genera un error de memoria insuficiente, para lo cual se usa una corrección en el código la encuentran aquí.
http://stackoverflow.com/questions/11145323/error-reading-excel-xlsx-with-apache-poi
Hola Nalder Francisco.
Me alegro de que hayas encontrado la solución. Gracias por comentar la solución.
Saludos.
una pregunta, funcionará tambien para mac?
Muy util, mil gracias.
Hola
@Elio Alvarado
Creo que en Mac debe de funcionar igualmente, pero no lo he probado. Puedes hacer la prueba y nos lo cuentas.
@comprar queso
Muchas gracias!
Saludos a los dos.
Hola, agradezco el aporte que hiciste a sido de mucha ayuda para despejar un par de dudas que tenia, pero me sale el siguiente error: El sistema no puede encontrar el archivo especificado
Estoy trabajando en jcreator 4.50 Pro, y ya intenté casi de todo pero no logro arreglar esto, gracias por tu ayuda
Respecto a mi pregunta anterior, ya pude hacer que lo reconozca. Guardé el archivo .xls en la carpeta en donde me genera las clases el jcreator, espero le sirva a alguien este dato.
Hola.
Me alegro de que solucionaras tu problema y se agradece que aportes la solución.
Saludos.
Hola, aparte de crear archivos excel, se puede buscar uno ya creado? como sería?
MUY INTERESANTE el poder interactuar entre java y excel
Hola.
¿A qué te refieres a buscar uno ya creado?. Pon un ejemplo para que pueda entender tu caso y pueda ayudarte. La librería JExcel permite leer, escribir y modificar hojas excel. Si quieres realizar búsquedas, quizás haya que utilizar otras herramientas.
Me alegro de que te haya resultado interesante.
Saludos.
Excelente
Gracias, aprendiendo cosas nuevas. :)
Gracias a ambos por comentar.
Buenas! Importando las librerías y poniendo este código lee toda la información de un archivo excel o tengo que cambiar algo del código? Como le indico que archivo tiene que leer?
Gracias de antemano
Y también me gustaría saber si una vez leído el excel ya puedo trabajar con los datos de este sin ningún problema
Hola.
Debes de indicar el archivo que quieres leer, en concreto la siguiente línea:
excel.leerArchivoExcel("archivoPrueba.xls");
Puedes poner la ruta absoluta del archivo así:
excel.leerArchivoExcel("/home/usuario/archivoPrueba.xls");
ó
excel.leerArchivoExcel("C:\\archivoPrueba.xls");
Esta librería también permite escribir / modificar los datos de un archivo excel. Puedes consultar la documentación para más información.
Saludos.
Buenas tardes, mi nombre es emiliano y como hago para que me lea el documento, mucho no entiendo perdon, lo corro como applet?? Muchas gracias por la amabilidad
Hola Emiliano.
Dame algunos datos del tipo de proyecto con el que estás trabajando. ¿Es una aplicación de escritorio ó una página web?.
Saludos.
Hola Felipe, es para una aplicación de escritorio, sabes como hacer o donde indagar mejor?
Hola Felipe tengo una gran duda que se que ya has respondido pero no logro solucionar:
he copiado y pegado tu codigo y pongo en mi metodo main,, cuando invoco el metodo leerArchivoExce asi
excel.leerArchivoExcel("C:\\archivoPrueba.xls")
y me tira el error
java.io.FileNotFoundException: C:\archivoPrueba.xls (El sistema no puede encontrar el archivo especificado)
no se como solucionarlo
por favor si podes explicarme paso a paso como solucionar esto te lo agreadeciria
Hola felinfo
Gracias por tus aportes.
Me explico, estoy escribiendo en un archivo Excel que es una copia de otro pre-establecido, pero solo me escribe aproximadamente unas 50 celdas, cuando escribo código para la celda 51 me da un error, el cual no sé el porqué, pero si anulo alguna celda anterior, ahí si escribe la celda 51(que ahora pasa a ser la celda 50), lo que ademas demuestra que el código de la celda 51 está bien escrito.
La aplicación la estoy desarrollando para un celular android 2.2 con jxl y eclipse. ¿A qué se debe esto, como le doy solución?.
Me parece buen punto que cuando una persona encuentre una solución por sus propios medios, la publiquen y mal punto para los mezquinos
Gracias Felinfo
Ayudenme por ahora, que yo mas adelante tambien ayudaré.
Felipe
Soy el mismo del comentario anterior, es para ampliar en lo siguiente, los datos que van al archivo Excel primero se guardan en la base de datos y desde allí se recuperan para ser escritos en las hojas de Excel, sospecho que el error está por ese lado, al parecer falla en alguna nueva instanciación despues de extraer cierta cantidad de datos. Creo en lo anterior porque guardé los datos en una matriz y no hubo problemas al escribir en las hojas de Excel los datos de dicha matriz, la desventaja de las matrices es que solo tienen vida mientras el programa se está ejecutando. ¿Conoces alguna manera de guardar matrices en una BD SQLite u otra forma para ser recuperada después?
Gracias.
Hola a todos.
Voy a responder a los últimos comentarios:
- Error java.io.FileNotFoundException: C:\archivoPrueba.xls (El sistema no puede encontrar el archivo especificado):
-> Debes de comprobar que el archivo archivoPrueba.xls está en C. Se trata del archivo que queremos leer.
- "... solo me escribe aproximadamente unas 50 celdas, ...":
-> Debe de tratarse de alguna limitación o bug de la librería. Quizás en el éste foro https://groups.google.com/a/teamdev.com/forum/?fromgroups#!forum/jexcel-forum puedas encontrar o plantear tu duda.
- ¿Conoces alguna manera de guardar matrices en una BD SQLite u otra forma para ser recuperada después?:
-> No he trabajado con SQLite, lo siento. Si quieres puedes darme más datos acerca del tipo de datos que quieres guardar e intentaré ayudarte.
Saludos a todos.
Hola!!! muchas gracias por colocar tu código...
Gracias a tí por comentar.
Saludos.
Hola, soy nuevo programando en java y no sé muy bien dónde se guardará la información leída por este código o si esto es sólo una clase para un código mayor.
El caso es que creé la clase, la ejecuté y me dice en el console de Eclipse:
Command format: Demo [-unicode] [-csv] [-hide] excelfile
Demo -xml [-format] excelfile
Demo -readwrite|-rw excelfile output
Demo -biffdump | -bd | -wa | -write | -formulas | -features | -escher | -escherdg excelfile
Demo -ps excelfile [property] [output]
Demo -version | -logtest | -h | -help
antes me dice algo de algún error o algo y le doy a proceed y sale eso... si alguien supiera explicarme...
Gracias
Antonio
Felinfo Te Saludo:
Encontré lo siguiente, al parecer no se pueden guardar directamente vectores y/o matrices en SQLite de Android, pero se puede simular, se guardan los datos en forma de texto separados con (,;:.) según nos convenga; recuperamos la variable de texto de la BD y con la función .split(";") por ejemplo, se convierte el texto guardado en un vector cuyos elementos están separados por (;) en este caso, convenientemente con dos funciones for le podemos dar el trato de matriz. Lo anterior es a grosso modo.
Otra cuestión Felinfo, Yo ya logro insertar una imagen mediante código a un archivo Excel, lo que no sé es, y que necesito de verdad es girar esa imagen mediante código (introduciendo el valor del ángulo de rotación), no he encontrado nada de esto en la WEB, ¿Pero es esto posible?
es que tengo el inconveniente de que tengo que abrir el archivo Excel cada vez que necesito rotar la imagen antes de imprimir y sería excelente automatizar esta parte también
Hola.
Antonio: En este ejemplo la información no se guarda. Simplemente leemos un fichero excel y mostramos su contenido en pantalla. Si quieres guardar esa información en una base de datos o un archivo, habría que incluir más código. Debes comprobar que en Console de Eclipse te imprime el contenido del Excel.
Anónimo: Desconozco si es posible rotar la imagen en Excel. Si quieres, indícame el código que estás utilizando para insertar la imagen e intentaré ayudarte.
Saludos.
Hola , a mi me salen este error al momento de ejecutar:
Exception in thread "main" jxl.read.biff.BiffException: Unable to recognize OLE stream
at jxl.read.biff.CompoundFile.(CompoundFile.java:116)
at jxl.read.biff.File.(File.java:127)
at jxl.Workbook.getWorkbook(Workbook.java:221)
at excel.main(excel.java:26)
y este es mi codigo:
import java.io.File;
import java.io.IOException;
import java.util.Locale;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.biff.CountryCode;
import jxl.read.biff.BiffException;
/**
* @author JocLuis
*/
public class excel {
public static void main(String[] args) throws IOException, BiffException {
//ruta de la hoja del calculo
//
WorkbookSettings wbSettings = new WorkbookSettings();
wbSettings.setEncoding("ISO-8859-1");
wbSettings.setLocale(new Locale("es", "ES"));
wbSettings.setExcelDisplayLanguage("ES");
wbSettings.setExcelRegionalSettings("ES");
wbSettings.setCharacterSet(CountryCode.SPAIN.getValue());
Workbook workbook = Workbook.getWorkbook(new File("C:/arc.xls"),wbSettings);
Sheet sheet = workbook.getSheet(0);//Elegimos la primera hoja
Cell celdaCurso = null;//inicializo el objeto que leerá el valor de la celda
String valorCeldaCurso=null;
celdaCurso= sheet.getCell(7,1);//celda de la columna 7 y fila 1
valorCeldaCurso= celdaCurso.getContents();//obteniendo valor
System.out.println(valorCeldaCurso);
workbook.close();
}
}
Hola José Mario.
Probablemente sea un problema de versiones del archivo excel que quieres leer. Intenta guardar el archivo como "Excel 97-2003 workbook".
Si esto no funciona, coméntamelo y buscamos otra posible solución.
Saludos.
Hola Felipe, felicitaciones por el código y compartirlo con nosotros.
Bueno, yo estoy en un nivel bastante básico de java, y estoy trabajando en netbeans...
Me podrías decir cómo es que coloco el archivo excel en la misma carpeta que el archivo java con el nombre "archivoPrueba.xls".
Todo lo demás si lo he entendido, sólo ese pequeño detalle.
Saludos.
Hola.
Ultimamente no estoy trabajando con Netbeans pero te diré cómo creo que puedes hacerlo. Para saber el directorio donde está el archivo Java debes de pulsar con el botón derecho sobre el archivo Java y debe de aparecerte una opción "Propiedades" y ahí te aparecerá. Una vez que sepas la ruta, debes de copiar el archivo xls en ese mismo directorio.
Si te surgen más dudas, dímelo.
Saludos.
Hola donde exactamente se pone el archivo .xls
porque me marca este error
java.io.FileNotFoundException: archivoPrueba.xls (El sistema no puede encontrar el archivo especificado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:138)
at jxl.Workbook.getWorkbook(Workbook.java:213)
at jxl.Workbook.getWorkbook(Workbook.java:198)
at mapping.ExcelBD.leerArchivoExcel(ExcelBD.java:15)
at mapping.ExcelBD.main(ExcelBD.java:46)
BUILD SUCCESSFUL (total time: 0 seconds)
te agraceria tu ayuda
Ya lo puse en esa carpeta pero me sigue marcando lo mismo que otra cosa puede ser?
Hola Elizabeth.
Si vas a utilizar el código de este artículo sin modificar nada, debes poner el archivo de prueba en el mismo directorio en el que tienes el archivo Java. Si necesitas saber su ruta, pincha con el botón derecho sobre el archivo Java, luego pulsa en Propiedades, y en Path te aparecerá.
Si necesitas algo más, dímelo.
Saludos.
Hola Felipe, soy nuevo en esto de programar y es primera vez que tengo que trabajar con uun archivo excel y este post es lo mas contundente que he pillado, te cuento trabajo en netbeans si yo ingresara un rut en un txt como podria ver si existe en el excel y en caso de existir puediera tomar el resto de los datos de ese rut y llenar el resto de los txt correspondiente a los datos de ese rut? te agradeceria muxo si me puedes ayudar
oye, y para hacer que lea filas y columnas especificas???
Muy útil, justo lo que buscaba. Mil gracias...
Hola.
@Anónimo: Perdona, no he entendido bien la pregunta. ¿A qué te refieres con rut? ¿Qué es lo que contiene ese txt?.
@Luis De Leon: En vez de recorrer todas las columnas de cada fila, indicaríamos la celda en concreto. Por ejemplo, si queremos leer la fila 3, columna 4, sería así:
data = hoja.getCell(4, 3).getContents(); //data = hoja.getCell(columna, fila).getContents();
System.out.print(data);
@Anónimo: Gracias a tí por comentar.
Saludos a todos.
Hola.
@Anónimo: Perdona, no he entendido bien la pregunta. ¿A qué te refieres con rut? ¿Qué es lo que contiene ese txt?.
@Luis De Leon: En vez de recorrer todas las columnas de cada fila, indicaríamos la celda en concreto. Por ejemplo, si queremos leer la fila 3, columna 4, sería así:
data = hoja.getCell(4, 3).getContents(); //data = hoja.getCell(columna, fila).getContents();
System.out.print(data);
@Anónimo: Gracias a tí por comentar.
Saludos a todos.
Buenos días
Una pregunta sobre un problema que se me esta presentando al momento de hacer un reporte de excel aplicando en una columna una formula que necesito el codigo que tengo es el siguiente:
String Rango1 = " \"2% ~ 5%\" ";
String FormulaRango = "=SI(MAX(E" + NumRowDetalle + ":G" + NumRowDetalle + ")<5;"+ Rango1 +"; SI(MAX(E" + NumRowDetalle + ":G" + NumRowDetalle + ")<10; \"5% ~ 10%\"; SI(MAX(E" + NumRowDetalle + ":G" + NumRowDetalle + ")<20; \"10% ~ 20%\"; SI(MAX(E" + NumRowDetalle + ":G" + NumRowDetalle + ")<50; \"20% ~ 50%\";\"> 50%\"))))";
Formula sFormula = new Formula(7, (NumRowDetalle - 1), FormulaRango);
sheet.addCell(sFormula);
el codigo se ejecuta sin ningun problema pero al momento de ver el archivo sale un error como =#NA
entonces quisiera saber si alguien de ustedes a usado funciones SI aplicandolos con la libreria jxl de java.
muchas gracias,
Hola Sixto Antonio.
Lo siento, pero no he trabajado con funciones mediante esta librería. Lo único que te puedo decir es que pruebes primero la función en Excel, para ver si está construida correctamente. Una vez que estés seguro de que es correcta, pásala a tu aplicación Java.
Saludos.
Hola Felipe: Tienes algún ejemplo de código que recorra un directorio en la máquina del cliente y lea todos los archivos de Excel que estén colocados ahí?
Hola.
No tengo ningún ejemplo que haga lo que pides. Pero lo que puedes hacer es obtener el nombre de los archivos Excel del directorio así:
http://stackoverflow.com/questions/5694385/getting-the-filenames-of-all-files-in-a-folder
Y una vez que tengas los nombres de los archivos, puedes aplicar lo que explico en éste artículo. Puedes preguntarme si tienes dudas.
Espero haberte ayudado.
Saludos.
BUENOS NOCHES MUCHAS GRACIAS POR EL POS
tengo una consulta; tengo una informacion en una hoja de excel la que tengo que hacer es leerla despues acuerdo a la informacion leida generar un reporte en PDF de siertas filas; como me puedes ayudar, gracias
Hola.
Lo que quieres hacer se podría dividir en dos:
La parte de lectura del Excel, se puede hacer como indico en este post.
Para la parte de generacón del PDF puedes utilizar el paquete iText JAR, tal y como indico aquí: http://felinfo.blogspot.com.es/2009/07/generar-un-pdf-en-java-usando-itext-jar.html
Si tienes alguna duda, puedes preguntarme.
Saludos.
Muy completo muchas gracias por el aporte.
Gracias a tí por comentar.
Saludos.
Hola Felipe tengo problemas con
WorkbookSettings archivoExcel = new WorkbookSettings(new File(archivoDestino));
Estoy en NetBeans 6.9.1 no se si importe mal las librerias que podrias ayudarme saludos.
Hola Alejandro.
Debes indicarme qué error te aparece e intentaré ayudarte.
Saludos.
Muchas gracias, justo lo que necesito.
Hola Diego Andrés. Gracias a tí por comentar.
Me sirvió mucho el codigo para si¡olucionar el encoding utf-8 con los codigos:
WorkbookSettings wbs = new WorkbookSettings();
wbs.setEncoding("ISO-8859-1");
wbs.setLocale(new Locale("es", "ES"));
wbs.setExcelDisplayLanguage("ES");
wbs.setExcelRegionalSettings("ES");
wbs.setCharacterSet(CountryCode.SPAIN.getValue());
Workbook wb = Workbook.getWorkbook(new File(destFile),wbs);
Gracias. buen aporte.
Gracias por tu comentario y aportación.
Saludos.
Excelente codigo Felipe, funciona 100%, pero queria preguntarte si estos datos obtenidos pueden colocarse dentro de un JTable?
Hola Abraham.
Sí, pueden colocarse dentro de un JTable. En este ejemplo se recorren todas las celdas y se obtiene el valor de cada una en la línea siguiente:
data = hoja.getCell(columna, fila).getContents();
Puedes insertar ese valor en un jtable o en cualquier otra estructura de datos.
Saludos.
Hola. Me sirvio bastante. Muchas Gracias.
Y ahora, cómo le hago para escribir en el archivo en una celda en específico??
Hola.
Mira este ejemplo: http://www.vogella.com/tutorials/JavaExcel/article.html
Espero que te sirva.
Saludos.
Muchas gracias amigo me fue de gran utilidad espero que andes bien.
Saludos!
Hola,
sabes como puedo utilizar estos datos obtenidos para hacer operaciones como si fuera una matriz?
Hola.
@Daniel Catalano: me alegro de que te sirviera.
@Monica Castiblanco: por favor, indícame a qué te refieres con hacer operaciones como si fuera una matriz.
Saludos.
¡¡Hola Felipe!! ¡Me llamo Humberto! ¡Es un muy buen gesto compartir tu esfuerzo!, he leído tu post de pies a cabeza y se que tu código no funciona para archivos .xlsx, pero aun asi quisiera saber que modificaciones necesitaria para usarlo en ambiente web (.jsp), pues lo mencionas en un comentario. Saludos!
Hola Humberto.
Gracias por comentar. Las modificaciones necesarias para utilizar este código en un entorno web dependen de en qué tipo de entorno web se quiera utilizar. Lo que sí es reutilizable es la clase ReadExcel y su método leerArchivoExcel y podrá usarse tal cual, sea cual sea el entorno.
Saludos.
Hola tengo una inquietud y para guardarlo en una bd como se hace??
Hola.
Dame más detalles sobre qué quieres guardar en la BD y tipo de BD.
Saludos.
hola disculpa me estoy metiendo en esto de leer archivos en excel , pero tambien lo quiero modificar, uno ya existente, como puedo hacer eso? o sea leerlo y modificarlo en donde yo quiera, muchas gracias
hola disculpa me estoy metiendo en esto de leer archivos en excel , pero tambien lo quiero modificar, uno ya existente, como puedo hacer eso? o sea leerlo y modificarlo en donde yo quiera, muchas gracias
Hola Mica.
Puedes utilizar esta misma librería (JExcel) para modificar archivos. Hay muchos tutoriales sobre ésto, por ejemplo aquí:
http://stackoverflow.com/questions/3605923/modifying-existing-excel-using-jxl
Saludos.
hola me servido mucho gracias!
otro detalle, como estoy trabajando en un aplicacion web, se ejecuta desde una computadora que no es el servidor.
y el detalle cuando ejecuto la parte de que se genere el excel si lo hace, si lo ejecuta pero en el servidor!
como puedo configurarlo que al momento de ejecutar el excel lo realize pero en el lado del cliente y no del servidor!
Hola José Manuel.
¿Qué tipo de aplicación estás haciendo, un servlet?. En ese caso la aplicación se ejecuta en el lado del servidor, no se puede ejecutar en el lado del cliente. No puedo darte una respuesta más concisa, ya que no tengo tu código. Si me das más detalles podré guiarte un poco más.
Saludos.
Hola
Como puedo validar que toda una fila del excel se encuentra vacía?
En este momento me tocá validar campo por campo, pero creo que existe alguna función con la que puedo validar la fila completa
Muchas Gracias
Hola.
No he encontrado ninguna función que valide si se encuentra vacía una fila. Pero si quieres, puedes hacer tu pregunta en el foro específico de esta librería: https://groups.google.com/a/teamdev.com/forum/?fromgroups#!forum/jexcel-forum
Siento no poder ayudarte más.
Un saludo.
Hola,
espero aun puedas apoyar con un problema.
En el archivo excel , tengo unos datos decimales (ejemplo : 2.56777) pero al obtener estos datos y mostrarlos con el : data = hoja.getCell(columna, fila).getContents();
System.out.print(data + " ") ..
aqui solo pinta el numero con tres decimales (ejmplo: 2,568 y en comas), se puede hacer algo para obtener y pintar el numero con todos sus digitos decimales (2.56777) y se corte en tres decimales...
gracias de antemano
Hola.
En principio debería de mostrarlo con todos los decimales. Si me muestras algo de tu código quizás te pueda ayudar.
Saludos.
Hola Felipe
Como podria crear una hoja excel desde un archivo de texto en java
Hola Dani.
Lo que pides se podría dividir en dos pasos:
1. Leer archivo de texto: http://felinfo.blogspot.com.es/2012/03/leer-un-archivo-de-texto-linea-por.html
2. Escribir en el excel: puedes usar esta misma librería (JExcel) ya que permite escribir en archivos excel, puedes mirar este ejemplo: http://www.java-tips.org/other-api-tips/jexcel/how-to-create-an-excel-file.html
Si tienes alguna duda, dímelo.
Un saludo.
como puedo escribir datos en un archivo de excel .XLSX desde java
Publicar un comentario