Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Base de Datos / Java / Proyectos / Exportar registros MySQL a Excel

Exportar registros MySQL a Excel

Por jc mouse domingo, febrero 24, 2013

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.

jexcelapi

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 🙂

«Mujer Excel: Dicen que hace muchas cosas, pero vos tan solo la usas para la operación básica. «

Tags

Artículos similares

Consultas con ADO.NET

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[...]

Netbeans «Problemas de Referencia»

Cuando nos bajamos un proyecto de internet o cuando nos pasan un código de otra pc (que técnicamente viene siendo lo mis[...]

Pruebas instrumentadas con Espresso

Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au[...]

Numero a Literal en Java

Cuando se realizan trabajos donde se necesita mostrar al cliente un determinado monto de dinero, tipo factura, recibo, c[...]

Blog MVC en PHP (Código Fuente)

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[...]

MultiHilos: Comunicación Cliente/Servidor

En anteriores post construimos aplicaciones Cliente/Servidor los cuales intercambiaban mensajes de una forma secuencial[...]