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

Imagenes en Access y Java

Aplicación en Java realida con el IDE de Netbeans 6.9 para trabajar con images en Base de Datos en Access 2003, el progr[...]

Alda: Lenguaje de programación para composición musical

Alda es un lenguaje de programación desarrollado por Dave Yarwood el cual esta basado en texto para composición musical,[...]

Software Libre: Decompilador Java

El proyecto «Java Decompiler» tiene como objetivo desarrollar herramientas para descompilar y analizar byte code de  jav[...]

Uso de BorderPane

BorderPane es un layout que distribuye los nodos hijos en 5 posiciones TOP, LEFT, BOTTOM, RIGHT y CENTER Los nodos hijos[...]

Campo autoincrement en PostgreSQL con pgAdminIII

En Postgres a diferencia de MySQL, colocar un campo con un valor autonumerico incrementable es un poco más complicado pe[...]

Personaliza un JComboBox estilo Metro de Windows

Si bien se pueden encontrar en google estilos java (Look and Feel) listos para cambiar la apariencia de nuestras aplicac[...]