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

Uso de BorderPane

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

MVC: Modelo, Vista y Controlador en PHP

EL patrón MVC (Model, View, Controller) o Modelo, Vista Controlador, es un tipo de diseño que separa en capas bien defin[...]

Migrar proyecto Netbeans a Eclipse

En ocasiones por motivos cualesquiera que sea queremos pasar proyectos hechos en netbeans a Eclipse, Netbeans cuenta con[...]

Puter: Sistema Operativo Web y Open Source

Puter no es solo un servicio de almacenamiento en la nube; es un proyecto que se define a sí mismo como «Sistema Operati[...]

Transición de imágenes al estilo PowerPoint

¿Qué es una transición? Una transición es un efecto de movimiento que se da entre una imagen y la siguiente en una prese[...]

Compartir texto plano con un ShareActionProvider en Android

Un Action Provider es un elemento que habita en la Action Bar para incrementar la accesibilidad de nuestras aplicaciones[...]