viernes, 3 de octubre de 2008

exportar e importar a excel desde java

Para trabajar con excel vamos a hacerlo con el
formato csv , este formato es super simple de utilizar

Para bajar el jar que vamos añadir a nuestro proyecto
lo vamos a buscar aqui:

http://www.csvreader.com/java_csv.php

asi se guarda y es el formato con el cual tenemos que guardar
nuestro archivo


El siguiente ejemplo vamos a guardar un archivo
csv en un Arraylist el cual guarda objetos de la clase
libro( con sus get y set de atrivutos privados)

//////// clase libro /////////////////

public class libro_ingresado {

private String nombre;
private String autor;
private String edicion;
private String anio;
private String codigo;
private String area;

/** Creates a new instance of libro_ingresado */
public libro_ingresado() {
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getAutor() {
return autor;
}

public void setAutor(String autor) {
this.autor = autor;
}

public String getEdicion() {
return edicion;
}

public void setEdicion(String edicion) {
this.edicion = edicion;
}

public String getAnio() {
return anio;
}

public void setAnio(String anio) {
this.anio = anio;
}

public String getCodigo() {
return codigo;
}

public void setCodigo(String codigo) {
this.codigo = codigo;
}

public String getArea() {
return area;
}

public void setArea(String area) {
this.area = area;
}

}

/////// clase de manejo de csv //////////


import com.csvreader.CsvReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JOptionPane;


public class leer_archivo {


public ArrayList leer_archivo_exel(String archivo){

ArrayList lista_libros = new ArrayList();

CsvReader reader = null;

try {

reader = new CsvReader(archivo,';');

} catch (FileNotFoundException ex) {
ex.printStackTrace();
JOptionPane.showInputDialog("en leer archivo");
}

try {

reader.readHeaders();

} catch (IOException ex) {
ex.printStackTrace();
}

try {

libro_ingresado libr;

while (reader.readRecord())
{

libr=new libro_ingresado();
libr.setNombre(reader.get("nombre"));
libr.setAutor(reader.get("autor"));
libr.setEdicion(reader.get("edicion"));
libr.setAnio(reader.get("anio"));
libr.setCodigo(reader.get("codigo"));
libr.setArea(reader.get("area"));
lista_libros.add(libr); // añadimos el objeto al arrayList

}

} catch (IOException ex) {
ex.printStackTrace();
System.err.println(" en while readrecord ");
}

reader.close();

return lista_libros; // retorna una objeto de ArrayList

}


}


////////////////////////////////////////////////////////

el siquiente codigo es abrir un JFileChooser donde buscamos
nuestro archivo csv , luego lo seleccionamos y es procesado.
el archivo es pasado a un jtable




////////////////// codigo evento boton ///////////////


DefaultTableModel dtm;
ArrayList libro_recivido=new ArrayList();

JFileChooser fileChooser = new JFileChooser(".");
int status = fileChooser.showOpenDialog(null); //fileChooser

if (status == JFileChooser.APPROVE_OPTION) {

File selectedFile =fileChooser.getSelectedFile();

leer_archivo l=new leer_archivo();
String direccion=selectedFile.getParent()+"/"+selectedFile.getName();

libro_recivido=l.leer_archivo_exel(direccion);
Iterator it=libro_recivido.iterator();

try{

Object datos[] = new Object [6];
dtm = (DefaultTableModel) jTable1.getModel();
for (int i = jTable1.getRowCount() - 1; i>=0; i--)
{
dtm.removeRow(i);
}


while(it.hasNext()){

libro_ingresado lib_ing;
lib_ing=(libro_ingresado) it.next();
datos[0]=lib_ing.getNombre();
datos[1]=lib_ing.getAutor();
datos[2]=lib_ing.getEdicion();
datos[3]=lib_ing.getAnio();
datos[4]=lib_ing.getCodigo();
datos[5]=lib_ing.getArea();

dtm.addRow(datos);
}

} catch(Exception e){
//manejo de error
}

} else if (status == JFileChooser.CANCEL_OPTION) {

System.out.println("cancele");

}

//////////////////////////////////////////////////

como fin un link de interes

http://schmidt.devlib.org/java/libraries-excel.html

29 comentarios:

EDWolf ^^! dijo...

PROBLEMA: No se imprime nada en el JTable.

He visto y compilado tu codigo y me fue de mucha ayuda, solo que tengo un inconveniente...

Primeramente estoy usando el compilador Netbeans 6.5

Ahora en la clase "leer_archivo" y en la linea que dice:

reader = new CsvReader(archivo,';');

Opino que deberias corregir ese punto y coma y cambiarlo con una coma, asi:

reader = new CsvReader(archivo,',');

El problema era de que en mi JTable no me imprimia nada y pense que si el archivo excel esta con extension SCV (delimitado por comas) deduje que ese cambio podria surtir efecto y funciono...

Ojala sirva de ayuda para cuamdo otros usuarios visiten tu blog...

Saludos...

Sucogfx dijo...

Muchas gracias por el aporte compañero, acabo de implementarlo y va de lujo, una cosilla para EDWolf^^!, el ejemplo está bien, de echo aunque al guardar como csv, ponga (delimitado por comas) si utilizas un editor de texto plano verás que en realidad está separado por ";".
Haciendo como tu dices lo que hace es sacarte todos los datos del csv ya que al no encontrar como separador la "," se lo traga todo y puede ser que no sea eso lo que se quiera. Un saludete a los dos ^^

kelly dijo...

hola
Estoy en un proyecto q tengo q sacar datos de una base de datos con oracle en java netbeans y luego pasarlo en un excel q hay como plantilla, ya tengo el codigo y funciona al llamar a una plantilla excel y modificar es decir llenar datos por tecladoy tambien ya tengo la coneccion con la base de datos pero como hago para despues de recuperar esos datos los pueda volacar a mi plantilla excel q tengo.
haber si me ayuda por favor te agradeseria mucho
atte: kelly

kelly dijo...

hola
Estoy en un proyecto q tengo q sacar datos de una base de datos con oracle en java netbeans y luego pasarlo en un excel q hay como plantilla, ya tengo el codigo y funciona al llamar a una plantilla excel y modificar es decir llenar datos por tecladoy tambien ya tengo la coneccion con la base de datos pero como hago para despues de recuperar esos datos los pueda volacar a mi plantilla excel q tengo.
haber si me ayuda por favor te agradeseria mucho
atte: kelly

Sucogfx dijo...

Kelly, supongo que a lo que te refieres es que tienes todo el código que extrae los datos de la base de datos y los guarda en clases de java, y ahora lo que quieres es estos datos extraidos de la base de datos, volcarlos a tu plantilla de excel no?

kelly dijo...

Hola
gracias por tu aportacion Sucoqfx.
pero ya lo tengo casi listo, solo que ahora tengo que presentarlo con un swing ya tengo mi swing con mis proyectos de excel terminados lo que no puedo crear un nuevo excel desde swing donde me premita modificar leer mi archivo excel.....haber si me puedes ayudar

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...
Este comentario ha sido eliminado por el autor.
pablo dijo...

Hola estoy implementando el codigo de arriba pero me sale un error al tratar de mostrar mis datos en el Jtable me sale esto:
java.io.FileNotFoundException: File ::{031E4825-7B94-4DC3-B131-E946B44C8DD5}\Documents.library-ms/Libro1.csv does not exist.
algo de q no existe mi documento cuando lo trato de abrir espero me puedan proporcionar ayuda!!!!

pablo dijo...

hola de nuevo jeje ya me di cuenta que no avia importado todos los archivos segun yo baje el completo pero ahora no encuentro el paquete org en la clase AllTests no me reconoce los import
import org.junit.After;
me dice que el paquete org.junit no existe mmm y no lo encontre en la carpeta que descarge ese donde viene o es libreria aparte??????????????????????

Anónimo dijo...

Hola... porque cuando quiero poner
import com.csvreader.CsvReader;

en el com. me sale error!! como su no existiera... pero yo agrege la libreria o el jar csv... lo coloque.. tu sabrias si algo mas me falta hacer ??? por favor respondeme.. publicalo aca estare pendientte muchas gracias !!!

Angel.Ramiro dijo...

vale...
eso es para leeer...
pero para escribir en el archivo de excel??

Anónimo dijo...

Hola Sucogfx me parecio interesante tu aporte para leer archivos excel pero el archivo q dejastes colgado en tu pagina ya no se puede descargar el codigo, lo podrias colgar en tu pagina de nuevo,o sino mandamelo ami correo y yo enviare a los q kieren el codigo por correo. Mi correo es on_ly_14@hotmail.com .Espero tu mensaje Porfa.

Anónimo dijo...

Muchas gracias!! por el aporte la verdad el ejemplo es muy bueno y es fácil de seguir.
Ojala mas gente arme ejemplos como los tuyos.
De nuevo muchas gracias.

Anónimo dijo...

hola, y cual seria la forma para hacer lo contrario, para pasar los datos de un jtable a un archivo de excel, disculpa es que ya he buscado muchas formas pero no encuentro algo a lo cual le pueda entender, graciass

Andree dijo...

amigos muy bueno el aporte -- pero alguin sabe como cargar una archivo de texto plano - osea *.DAT a un jatble y luego subirlo al mysql

Anónimo dijo...

necesito pasar una tabla html a excel con un boton en mi aplicacion que haga el trabajo y que ademas trabaje bajo cualquier navegador,,,, ya que tengo el codigo pero solo trabaja en IE

Anónimo dijo...

Hola:
Soy nuevo en java, necesito importar datos de excel a java y encontre este codigo, me intereso y lo compile, pero me marca un error en leer archivo, cambie el punto y coma (;) por la coma(,) que vi en el comentario pero me sigue marcando el mismo error, alguien puede ayudarme

felipe dijo...

Object datos[] = new Object [6];
dtm = (DefaultTableModel) jTable1.getModel();
for (int i = jTable1.getRowCount() - 1; i>=0; i--)
{
dtm.removeRow(i);
}

hola trato de cargar un archivo csv cualkiera con un boton tu ejemplo me ha sido de gran ayuda , pero me muestra error el dtm y jtable1 me dice que son variables no encontradas, saben alguna forma de como corregir ese error graciasssssssssssssssss aah uso netbeans muchas graciassssssssssss

pablo dijo...

olap felipe esas son variables que tu defines ya en tu programacion el dtm se refiere a tu modelo de datos dtm solo es la variable con la que haces referencia, y el jtable1 igual es solo la variable que guarda tu tabla en tu caso tendrian que ir los nombres que tu definiste para estos objetos por eso te marca el error supongo !!! suerte!!

felipe dijo...

hola pablo gracias, pero otra duda en el codigo no veo como definen esas variables si yo por ejemplo digo que el dtm sea int dtm; asi lo definiria o como seria en ese caso para definir una variable, muchas gracias por tu ayuda

felipe dijo...

hola pablo gracias por tu ayuda, pero me surge otra duda en el código no veo como definen esas variables por ejemplo intente haciendolo así int dtm; y para el jtable1 como los definiria?¿ muchas gracias, ahh mi duda principal es saber como definirlas y abrir un archivo csv desde un boton con java gracias!!!! muchas graciassssssssssssssssssssssss

pablo dijo...

Cuando creas el Jtable ya viene definida su variable y para el modelo de esta que supongo es tu duda por lo del dtm no es una variable entera sino de la clase model o default model asi la tendrias que declarar si no es que ya esta declarada.DefaultTableModel modelo = new DefaultTableModel();
JTable tabla = new JTable (modelo);tu
modelo seria el dtm o como le quieras llamar y es el que se va ver afectado en los cambios para tu otra duda tendrias que investigar un poco sobre lectura de archivos en java y simplemente ver el codigo y ponerlo en un boton ya sea que lo estes realizando por plantillas o directamente el codigo para dicho boton.
Suerte ;)

necronet dijo...

Buen articulo tambien podes revisar http://www.necronet.info/2010/11/exportar-jtable-excel-multiples-hojas.html

Anónimo dijo...

Hola buenas tardes, lo que no entiendo aun es a donde es que tengo que agregar el archivo .jar que descargo al inicio. Si me pueden ayudar se los agradezco :)

Anónimo dijo...

solo queria decir q me sirvio mucho su ayuda ya q habia estado buscando informacion acerca del tema y no habia encotrado tan especifico al tema.. gracias..

Unknown dijo...

ya corri el programa y me funciono muy bien, mi pregunta es que porque si al archivo csv le pongo otro nombre que no sea prueba excel me marca error???

si pongo cualquier otro nombre me manda una excepcion

Unknown dijo...

Muchas gracias, hay forma de este codigo lo puedas aplicar a Base de datos, en vez de a un jtable.Gracias