Exportar JTable a Excel (Enviar datos de JTable a Hoja de Excel)

jtable

Obtener información de una aplicación se hace necesario en muchos casos, es por ello que debemos dotar de estas funciones para que el usuario final pueda acceder u obtener a la información que esta visualizando, en esta entrada veremos como exportar JTable a Excel mostrando un cuadro de dialogo con el que capturaremos la ruta en la cual deseamos crear nuestro archivo, veamos:

Exportar JTable a Excel (Enviar datos de JTable a Hoja de Excel)

Primero que todo necesitamos importar la libreria jxl.jar, como ya saben [Clic derecho sobre libraries — add Jar Folder ], Luego creamos una clase yo la llamaré Exporter y tiene el siguiente código:

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 package Clases;

import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.List;
 import javax.swing.JTable;
 import jxl.Workbook;
 import jxl.write.Label;
 import jxl.write.WritableSheet;
 import jxl.write.WritableWorkbook;

/**
 *
 * @author IdlhDeveloper
 */
 public class Exporter {
 private File file;
 private List tabla;
 private List nom_files;

public Exporter(File file, List tabla, List nom_files) throws Exception {
 this.file = file;
 this.tabla = tabla;
 this.nom_files = nom_files;
 if(nom_files.size()!=tabla.size()){
 throw new Exception("Error");
 }
 }
 public boolean export() {
 try {
 DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
 WritableWorkbook w = Workbook.createWorkbook(out);
 for (int index = 0; index < tabla.size(); index++) {
 JTable table = tabla.get(index);
 WritableSheet s = w.createSheet(nom_files.get(index), 0);
 for (int i = 0; i < table.getColumnCount(); i++) {
 for (int j = 0; j < table.getRowCount(); j++) {
 Object object = table.getValueAt(j, i);
 s.addCell(new Label(i, j, String.valueOf(object)));
 }
 }
 }
 w.write();
 w.close();
 return true;
 } catch (Exception e) {
 return false;
 }
 }
 }

 

Boton Exportar:

 if (jTable1.getRowCount() > 0) {
 JFileChooser chooser = new JFileChooser();
 FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivos de excel", "xls");
 chooser.setFileFilter(filter);
 chooser.setDialogTitle("Guardar archivo");
 chooser.setAcceptAllFileFilterUsed(false);
 if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
 List tb = new ArrayList();
 List nom = new ArrayList();
 tb.add(jTable1);
 nom.add("Compras por factura");
 String file = chooser.getSelectedFile().toString().concat(".xls");
 try {
 Clases.Exporter e = new Exporter(new File(file), tb, nom);
 if (e.export()) {
 JOptionPane.showMessageDialog(null, "Los datos fueron exportados a excel en el directorio seleccionado", "Mensaje de Informacion", JOptionPane.INFORMATION_MESSAGE);
 }
 } catch (Exception e) {
 JOptionPane.showMessageDialog(null, "Hubo un error " + e.getMessage(), " Error", JOptionPane.ERROR_MESSAGE);
 }
 }
 }else{
 JOptionPane.showMessageDialog(this, "No hay datos para exportar","Mensaje de error",JOptionPane.ERROR_MESSAGE);
 }

Para este ejemplo he creado un JTable y le he ingresado algunos datos de forma manual:

Exportar JTable
El en código anterior vemos como lanzamos el dialogo para guardar el archivo en la ruta seleccionada y hacemos llamado a la clase Exporter a la cual le pasamos nuestro JTable como parámetro, sin mas ni mas solo queda ejecutar nuestra aplicación y probar que todo esté en orden.
Puedes descargar el código completo en
GitHub