Java Excel API es un API para java que permite a los desarrolladores leer y escribir en hojas de cálculo Excel. jexcelapi permite a los programadores de Java leer hojas de cálculo de Excel, modificarlos y escribir los cambios por ejemplo, en disco, HTTP, base de datos, etc.
Puedes descargar jexcelapi en su ultima versión 2.6.12 (última modificación 2009-10.26), ademas cuenta con otra API para C# igualmente fácil de usar.
En este ejemplo utilizamos una base de datos con solo una tabla y unos cuantos registros.
-- -- Estructura de tabla para la tabla 'persona' -- CREATE TABLE persona ( ci varchar(7) NOT NULL, nombre varchar(22) NOT NULL, apellido varchar(22) default NULL, fechanac datetime NOT NULL, salario float default '0', PRIMARY KEY (ci) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Volcar la base de datos para la tabla 'persona' -- INSERT INTO persona VALUES ('7676544', 'Segismundo', 'Cruel', '2011-12-15 12:35:00', 700.25); INSERT INTO persona VALUES ('1233211', 'paulina', 'Larevol Tosa', '2011-12-15 22:12:11', 1500); INSERT INTO persona VALUES ('2222222', 'Paca', 'Garte', '2012-07-26 10:00:00', 723.99); INSERT INTO persona VALUES ('5545443', 'Nicolas', 'Queroso', '1988-02-01 15:28:02', 269.9); INSERT INTO persona VALUES ('5451110', 'Mercedes', 'Carada', '1995-02-01 23:28:46', 890.55);
Y la clase que hará uso de jexcelapi para exportar los registros es la siguiente:
import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Locale; import jxl.Workbook; import jxl.WorkbookSettings; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; /** * @web https://www.jc-mouse.net * @author Mouse */ public class toExcel { /* DATOS PARA LA CONEXION */ /** nombre de la base de datos*/ private String db = "dbtest"; /** usuario */ private String user = ""; /** contraseña de MySql*/ private String password = ""; /** Cadena de conexion */ private String url = "jdbc:mysql://localhost/"+db; /** variable para trabajar con la conexion a la base de datos */ private Connection conn = null; /** ruta y archivo de destino */ File file = new File("e:\\temporal\\output.xls"); /** * Constructor de clase */ public toExcel() { this.url = "jdbc:mysql://localhost/"+this.db; try{ //obtenemos el driver de para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection( this.url, this.user , this.password ); if ( conn!=null ){ System.out.println("Conexión a la base de datos "+this.db+"...... Listo "); } }catch(SQLException e){ System.err.println( e.getMessage() ); }catch(ClassNotFoundException e){ System.err.println( e.getMessage() ); } } /** * Metodo para obtener los registros de la base de datos y crear el archivo excel */ public void WriteExcel() { int row=0; //formato fuente para el contenido contenido WritableFont wf = new WritableFont( WritableFont.ARIAL, 12, WritableFont.NO_BOLD ); WritableCellFormat cf = new WritableCellFormat(wf); //Interfaz para una hoja de cálculo WritableSheet excelSheet = null; WritableWorkbook workbook = null; //Establece la configuración regional para generar la hoja de cálculo WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN")); try { workbook = Workbook.createWorkbook( file, wbSettings ); //hoja con nombre de la tabla workbook.createSheet( "persona", 0 ); excelSheet = workbook.getSheet(0); System.out.println( "creando hoja excel.....Listo" ); } catch (IOException ex) { System.err.println( ex.getMessage() ); } //Consulta SQL String sql = "SELECT ci , nombre , apellido , fechanac, DATE_FORMAT(fechanac,'%Y-%m-%d %h:%i:%s') AS fecha , salario FROM persona "; try{ PreparedStatement pstm = conn.prepareStatement( sql ); ResultSet res = pstm.executeQuery(); System.out.println( "obteniendo registros.....Listo" ); while(res.next()) { Number ci = new Number( 0 , row, res.getLong( "ci" ) , cf ); Label nombre = new Label( 1 , row, res.getString( "nombre" ) , cf ); Label apellido= new Label( 2 , row, res.getString( "apellido" ) , cf ); Label fechanac= new Label( 3 , row, res.getString( "fecha" ) , cf ); Number salario= new Number( 4 , row, res.getFloat( "salario" ) , cf ); row ++; try { excelSheet.addCell( ci ); excelSheet.addCell( nombre ); excelSheet.addCell( apellido ); excelSheet.addCell( fechanac ); excelSheet.addCell( salario ); } catch (WriteException ex) { System.err.println( ex.getMessage() ); } } res.close(); }catch( SQLException e ){ System.err.println( e.getMessage() ); } //Escribe el archivo excel en disco try { workbook.write(); workbook.close(); System.out.println( "Escribiendo en disco....Listo" ); } catch (IOException ex) { System.err.println( ex.getMessage() ); } catch (WriteException ex) { System.err.println( ex.getMessage() ); } System.out.println( "Proceso completado...." ); } }//--> fin clase
La anterior clase es sencilla de comprender y esta llena de comentarios, pero si aún así tienes problemas, te recomiendo le des una leída a la documentación de esta API en su pagina oficial.
Puedes descargar el proyecto completo de este ejemplo AQUI 🙂
OJO Para ejecutar correctamente el ejemplo de esta página, necesitas
– Descargar e instalar jexcelapi
– Tener instalado el conector Java-MySQL
– Netbeans 6.9 o superior
– MySQL y una base de datos.
– MS Excel
Me despido con una frase celebre para pensar 🙂
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Secret (https://getsecret.now.sh/) es una aplicación web gratuita que te permite enviar mensajes temporales cifrados que...
Continuando con estos post de Cliente/Servidor, en esta oportunidad realizaremos un ejemplo usando un dispositivo móvil...
¿Quieres iniciarte en la programación? ¿Eres un programador impaciente que odia instalar cualquier software en su comput...
«Material Design es una guía integral para el diseño visual, de movimientos y de interacción en distintas plataformas y...
XJC es una herramienta de linea de comandos del compilador de esquemas de JAXB que se puede utilizar para convertir un e...
Una de las novedades de Java 9 y 10 aunque por el momento en modo de prueba (jdk.incubator.http) es el Cliente HTTP el c...
Los comentarios estan cerrados
El archuivo helpers.php en Laravel contiene funciones globales de PHP los cuales se pueden utilizar en cualquier parte d...
El gigante tecnologico de Google ingresa a la competencia de los ChatBot con Inteligencia Artificial a traves de Bard. B...
uiverse.io es u sitio web para desarrolladores que contiene miles de elementos de interfaz de usuario HTML/CSS creados y...
¿Estas buscando fondos animados para tus sitios web? Animated BG es un sitio web donde puedes encontrar cientos de fondo...
orale otra forma para exportar registros en excel, esto ya lo habia echo pero como siempre cuando termino haciendo algo busco como mejorarlo xD alguna idea de como por ejemplo realizar esto mismo pero con un formato y color de celdas y columnas? tambien para realizar los graficos de el contenido exportado? se que hay una libreria que junto a iReport hace esto pero igual estaria genial saber como hacer eso pero en excel.
El JAr que utilizo te permite dar formato a las celdas
Oyer hermano primero que nada muchas gracias por ese gran aporte, me ha servido de mucha ayuda para finalizar un sitemita que me encargo el inegi, sin embargo no he logrado hacer para que a la hora de escribir el archivo de Excel cuando hago otra entrada al archivo no me borre lo escrito con anterioridad, no se si hay o cabe la posibilidad de que me puedas decir como hacerle para no borar lo que ya habia escrito antes?… de antemano muchas gracias!!!
Olvide aclarar que por ejempolo si ya hay algo escrito en el libro lunes que me cree un libro martes y ahi escriba lo nuevo como lo podria hacer?
si amigo ya vi, pero me referia a crear graficos como de barras, circular etc, asi como se hace con JFreeChart que de echo no lo eh usado pero igual le dare una leida para ver como implementarlo, queria saber como hacer esto ya en una hoja de calculo de excel que desde la propia aplicacion exporte x base de datos y que saque una estadistica con graficos y cosas asi o si tienes algo para leer y ver como hacer eso? ya me pondria a estudiar lo que me pases hasta lograr lo que quiero que estoy seguro conforme vaya haciendo algo quedre hacer mas cosas xD
una forma de implementar los graficos, en una hoja de excel ,,, no seria necesariaente usar la liberria , podrias usar el MySQl JDBC con ello puede exportar graficas de la Base de Datos. ahi ya estrai tu siolucion, porque crear un agrafica en java para dentro de un panel y de los datos d eun excel , lo unico que conosco es los free chart, y para su exportacion en reportes usa el Ireport
Excelente aporte
Hola muchas gracias, por el ejemplo indicado, pero me puedes ayudar con la siguiente consulta, en tu ejemplo creas un archivo temporal «e:\\temporal\\output.xls», este archivo es el final? donde queda los registros obtenidos?. No he probado aun el ejemplo expuesto pero como seria si dicho archivo no lo quieres guardar en disco y dar la opcion de elegir donde guardar?, se entiende mi consulta?
Gracias de antemano