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 🙂
ADO.NET proporciona un puente entre los objetos creados en VB o C# y la base de datos MySQL asociada a la aplicación, a[...]
Cuando nos bajamos un proyecto de internet o cuando nos pasan un código de otra pc (que técnicamente viene siendo lo mis[...]
Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au[...]
Cuando se realizan trabajos donde se necesita mostrar al cliente un determinado monto de dinero, tipo factura, recibo, c[...]
En este post dejo el código fuente de un blog en PHP desarrollado siguiendo el patrón de diseño MVC (Modelo, Vista y Con[...]
En anteriores post construimos aplicaciones Cliente/Servidor los cuales intercambiaban mensajes de una forma secuencial[...]