En este post, crearemos una aplicación java que nos permita arrastrar un archivo excel hacia la aplicación, abrirlo y cargar sus datos en un JTable. Pero mejor ve el siguiente video para despejar dudas.
Necesitamos
– Java 1.6 / Netbeans 7.3+
– Librería JExcelApi
Nivel: Intermedio
Tiempo: 15 minutos
Proyecto
1. Crea un proyecto en Netbeans con la siguiente estructura:
Debes añadir también la librería JExcel al proyecto.
2. La Interfaz
La interfaz de usuario comprende un JFrame: JGUIForm que contiene a su vez un JTable, no necesitamos nada más.
3. Clase DropExcel.java
Esta clase es quien realiza el trabajo de arrastre implementando DropTargetListener, así también se encargara de leer el archivo excel una vez que este sea arrastrado a la interfaz.
import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.File; import java.io.IOException; import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; /** * @web https://www.jc-mouse.net * @author Mouse */ public class DropExcel implements DropTargetListener{ private DropTarget dt; private JTable jtable; private DefaultTableModel TableModel = new DefaultTableModel(); public DropExcel( JTable jtable ){ this.jtable = jtable; dt = new DropTarget( jtable , this ); } @Override public void dragEnter(DropTargetDragEvent dtde) {} @Override public void dragExit(DropTargetEvent dte) {} @Override public void dragOver(DropTargetDragEvent dtde) {} @Override public void dropActionChanged(DropTargetDragEvent dtde) {} @Override public void drop(DropTargetDropEvent dtde) { try { /* proporciona datos para operaciones de transferencia en swing */ Transferable tr = dtde.getTransferable(); /* Devuelve una array de objetos DataFlavor */ DataFlavor[] flavors = tr.getTransferDataFlavors(); if( flavors.length > 0 ){ /* Si existe una lista de objetos de archivo */ if ( flavors[0].isFlavorJavaFileListType() ) { dtde.acceptDrop( DnDConstants.ACTION_COPY ); /* obtiene un List con los archivos arrastrados al componente */ java.util.List list = (java.util.List) tr.getTransferData( flavors[0] ); if( !list.isEmpty() ){ /* abre el primer archivo */ File file = new File( list.get(0).toString() ); if ( file.exists() ){ /* SI el archivo corresponde a un archivo excel */ if( file.getName().endsWith("xls") ) { readXLS( file ); }else{ JOptionPane.showMessageDialog(null,"No es un archivo *.xls valido","Error", JOptionPane.ERROR_MESSAGE ); } }else{ System.err.println( "error archivo no existe " ); } } dtde.dropComplete(true); return; } } System.err.println("Drop failed: " + dtde ); dtde.rejectDrop(); } catch (Exception ex) { System.err.println( ex.getMessage() ); dtde.rejectDrop(); } } /** * Metodo para leer solo la primera hoja de un archivo excel y colocar los datos * en un DefaultTableModel * @param File xls archivo excel */ private void readXLS( File xls ){ try { Workbook workbook = Workbook.getWorkbook( xls ); /* Si existen hojas */ if( workbook.getNumberOfSheets() > 0 ){ Sheet hoja = workbook.getSheet( 0 ); /* obtiene solo la primera hoja */ /* forma el array para los nombres de las columnas del JTable */ String[] columNames = new String[ hoja.getColumns() ]; /* Forma la matriz para los datos */ Object[][] data = new String[ hoja.getRows() ][ hoja.getColumns() ]; /* Recorre todas las celdas*/ for ( int fila = 0; fila < hoja.getRows(); fila++ ) { for ( int columna = 0; columna < hoja.getColumns() ; columna++ ) { /* Asigna nombre de columna */ columNames[columna]="Columna " + ( columna + 1 ); /* Lee celda y coloca en el array */ data[ fila ][ columna ] = hoja.getCell(columna, fila).getContents(); } } /* Crea el TableModel y asigna a tabla */ TableModel = new DefaultTableModel( data, columNames ); jtable.setModel(TableModel); } } catch (IOException ex) { System.err.println( ex.getMessage() ); } catch (BiffException ex) { System.err.println( ex.getMessage() ); } } public DefaultTableModel getTableModel() { return this.TableModel; } public DropTarget getDropTarget() { return this.dt; } }
4. Para terminar el proyecto, debemos implementar la clase anterior en la interfaz
public class JGUIForm extends javax.swing.JFrame { DropExcel de; /** * Creates new form JGUIForm */ public JGUIForm() { initComponents(); de = new DropExcel( jTable1 ); } ...
Ejecutamos y listo 🙂
Proyecto en Netbeans 7.3 AQUI
En este tuto realizaremos la implementación y ejecución de procedimientos almacenados de MySQL en Java, si quieres darle[...]
Autenticación en una pagina web es el proceso de confirmar que un usuario es quien dice ser, asi de simple. En el siguie[...]
1. Dado N números enteros ingresados por teclado, determine el promedio de estos 01 static void Main(string[] args) 02 {[...]
Control de versiones: Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los eleme[...]
En un post anterior se vio como llenar un JTree en donde se conocía de antemano que estructura iba a tener esta sin emba[...]
Si desarrollas en Laravel, conoces el ritual de escribir dd($variable), refrescar el navegador, analizar los datos, borr[...]