Como dicen que más vale tarde que nunca, aquí va el segundo artículo de la serie dedicada al tratamiento de documentos Excel desde el lenguaje Java.
En este articulo repasaré la segunda de las opciones a la hora de enfrentarse a una tarea de este tipo, que como ya dijimos, consiste en utilizar alguna de las APIs específicas desarrolladas con este objetivo. Las dos APIs más conocidas son las de Jakarta POI y JExcelApi. Tras evaluar ambas sólo puedo llegar a la conclusión de que son muy parecidas, aunque existen algunas diferencias que resumiré más abajo.
Jakarta POI
POI es una api java que nos permitirá leer, escribir y modificar documentos excel con suma facilidad, aunque como bien indican en su web oficial, la funcionalidad de escritura es la más madura. Con esta API podremos manipular fácilmente muchas de las entidades existentes en un documento excel: libros, hojas, filas, celdas, fórmulas, etc. Sin embargo, a la hora de considerar esta herramienta también deberemos tener en cuenta algunas limitaciones, como el no soportar la creación de gráficas, celdas con varios formatos, macros o tablas dinámicas, aunque sí podremos modificar o leer documentos que contengan estos elementos sin riesgo a perderlos.
Veamos un ejemplo de lo sencillo que resulta crear y escribir en un documento excel:
//Se crea el libro Excel HSSFWorkbook wb = new HSSFWorkbook(); //Se crea una nueva hoja dentro del libro HSSFSheet sheet = wb.createSheet("HojaEjemplo"); //Se crea una fila dentro de la hoja HSSFRow row = sheet.createRow((short)0); //Creamos celdas de varios tipos row.createCell((short)0).setCellValue(1); row.createCell((short)1).setCellValue(1.2); row.createCell((short)2).setCellValue("ejemplo"); row.createCell((short)3).setCellValue(true);
Por cuestiones de espacio, sólo muestro en el artículo este pequeño fragmento de código. Sin embargo, podéis consultar un pequeño programa de demostración completo que he escrito para mostrar lo fácil que resulta leer y escribir documentos excel con esta API.
En cuanto a la documentación disponible, he decir que a parte de la inevitable documentación javadoc, la API viene acompañada de una guía rápida con muchos ejemplos sencillos que cubren gran parte de la funcionalidad de la misma. Esta guía, aunque no demasiado extensa, es más que suficiente para aprender a utilizar rápido muchas de las características disponibles.
Como puntos "negativos" puedo mencionar que toda la documentación se encuentra en inglés (como no podía ser de otra forma) y que el proyecto parece haber estado "muerto" bastante tiempo, aunque parece que el desarrollo se ha retomado hace poco, ya que existe una versión DEV de junio de 2006. La última versión estable de la librería es la 2.5.1, de agosto de 2004.
Referencias:
- Web Oficial Jakarta POI [Inglés]
- Web Oficial Jakarta POI [Español]
- Artículo sobre POI en JavaWorld.com [Inglés]
- Artículo sobre POI en OnJava.com [Inglés]
JExcelApi
Al igual que POI, JExcelApi es una API destinada a facilitar la lectura, escritura y modificación de documentos excel desde aplicaciones java. Los objetos y métodos disponibles son muy similares a los que hemos visto para POI, siendo súmamente sencillo manipular libros, hojas y celdas de un documento excel. En el fragmento siguiente se muestra como realizar las mismas acciones del ejemplo anterior (crear un libro y escribir varias celdas con distintos tipos de datos), pero esta vez usando JExcelApi:
//Se crea el libro Excel WritableWorkbook workbook = Workbook.createWorkbook(new File("ejemplo.xls")); //Se crea una nueva hoja dentro del libro WritableSheet sheet = workbook.createSheet("HojaEjemplo", 0); //Creamos celdas de varios tipos sheet.addCell(new jxl.write.Number(0, 0, 1)); sheet.addCell(new jxl.write.Number(1, 0, 1.2)); sheet.addCell(new jxl.write.Label(2, 0, "ejemplo")); sheet.addCell(new jxl.write.Boolean(3,0,true));
Igualmente, se proporciona un ejemplo completo (análogo al mostrado para POI) de cómo leer y escribir un documento excel con JExcelApi.
JExcelApi también viene acompañado de una documentación muy completa en formato javadoc y de un pequeño tutorial con varios ejemplos de cómo realizar las acciones típicas sobre un documento. Esta API tiene también actualmente algunas limitaciones, como por ejemplo no permitirse la creación de gráficas o macros. Por suerte, como ocurría con POI, sí podremos al menos leer o modificar documentos que ya contengan estos elementos sin perderlos durante el proceso.
Este proyecto sí se encuentra actualmente activo y en desarrollo, siendo la última versión estable de la librería, la 2.6.2, de octubre de 2006.
Por último, como curiosidad, mencionar que existe un proyecto para portar a la plataforma .NET esta API java. Dicho proyecto recibe el nombre de NExcel y actualmente existe una versión alpha de febrero de 2005.
Referencias:
- Web Oficial del proyecto en SourceForge [Inglés]
- Web original de la API [Inglés]
- Web de NExcel (versión en .NETde la API) [Inglés]
12 comentarios
gracias por tomarte el tiempo y enseñar como se leen archivos en excel, me sirvio de mucho ! ! !
Me sirvio mucho tu articulo…andaba bien perdida
Gracias por ayudar!!!!!
y como se edita???????? por que si haces un writable te crea un fichero nuevo, estoy perdida
Gracias por el dato me fue de gran ayuda
bueno quisiera saber como se hace para q sigua agregando mas datos en las filas sin borrar lo que ingrese antes x el writetable hace eso me vuelve a crear un nuevo .xls
hola!!
Es la primera vez que utilizo jakarta poi y tengo una duda verdaderamente urgente!! estoy por terminar una aplicacion de escritorio con netbeans en lacual genero tres consultas ke se muestran en tablas dentro de internal frames esta trabaja super cuando esta en mi makina pero cuando corroel archivo jar en otra makina el boton para entrar aesa ventana no funciona!!me podrias ayudar? las libreriasya las agregue al proyecto desde las propiedades y a la carpeta de java!!
Espero sus respuestas GRACIAS!!!
Muchas gracias! Valiosa información, es la primera vez que lo uso y me resultó muy útil y sencillo.
Hola buen material pero como le haces para que se agreguen los acentos y las ñ, ya que este codigo no lo hace :S
Como hago para cargar la librería Jakarta POI……gracias
HE INTENTADO OBTENER EL TEXTO SIN FORMATO DE UNA HOJA DE EXCEL CON EL API «POI», SOLO QUE NO TIENE ESA FUNCIONALIDAD, O SI LA TIENE NO HE PODIDO IMPLEMENTARLO, ALGUIEN SABE?
me gustaría saber si esto también es posible en j2me(blacberry)o existe alguna forma de hacerlo en esa plataforma! gracias.
Con una aplicación que corre con jdk 1.3 puedo utilizar el jexcel??? el jexcel me permite manipular las celdas, es decir darle tamaño, color, bordes etc??