Foros del Web » Programación para mayores de 30 ;) » Java »

Leer Excel desde java.

Estas en el tema de Leer Excel desde java. en el foro de Java en Foros del Web. Hola tengo un problema. Mi aplicación tiene que leer un excel y guardar los datos en la base de datos. La cuestion es que eso ...
  #1 (permalink)  
Antiguo 24/11/2005, 09:27
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 54
Antigüedad: 20 años, 1 mes
Puntos: 0
Leer Excel desde java.

Hola tengo un problema. Mi aplicación tiene que leer un excel y guardar los datos en la base de datos. La cuestion es que eso ya lo he conseguido. El problema viene cuando el excel tiene macros que me da un error. Si el excel no tiene macrois me funciona perfectamente, el error es el siguiente:

java.lang.reflect.InvocationTargetException

at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:274)
at org.apache.poi.hssf.record.RecordFactory.createRec ord(RecordFactory.java:224)
at org.apache.poi.hssf.record.RecordFactory.createRec ords(RecordFactory.java:160)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>( HSSFWorkbook.java:163)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>( HSSFWorkbook.java:210)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>( HSSFWorkbook.java:191)
at eroski.scin.pmis.struts.controller.HSSF1.getWorkbo ok(HSSF1.java:24)
at eroski.scin.pmis.struts.controller.comActionLeerEx cel.execute(comActionLeerExcel.java:55)
at org.apache.struts.action.RequestProcessor.processA ctionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process( RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(Act ionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(Actio nServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at com.evermind.server.http.ServletRequestDispatcher. invoke(ServletRequestDispatcher.java:795)
at com.evermind.server.http.ServletRequestDispatcher. forwardInternal(ServletRequestDispatcher.java:330)
at com.evermind.server.http.HttpRequestHandler.proces sRequest(HttpRequestHandler.java:794)
at com.evermind.server.http.HttpRequestHandler.run(Ht tpRequestHandler.java:270)
at com.evermind.server.http.HttpRequestHandler.run(Ht tpRequestHandler.java:112)
at com.evermind.util.ReleasableResourcePooledExecutor $MyWorker.run(ReleasableResourcePooledExecutor.jav a:192)
at java.lang.Thread.run(Thread.java:534)

at java.lang.System.arraycopy(Native Method)
at org.apache.poi.hssf.record.UnknownRecord.<init>(Un knownRecord.java:62)

at org.apache.poi.hssf.record.SubRecord.createSubReco rd(SubRecord.java:57)error!!!!!!!!!!!!!!!!Unable to construct record instance, the following exception occured: null
at org.apache.poi.hssf.record.ObjRecord.fillFields(Ob jRecord.java:99)
at org.apache.poi.hssf.record.Record.fillFields(Recor d.java:90)
at org.apache.poi.hssf.record.Record.<init>(Record.ja va:55)
at org.apache.poi.hssf.record.ObjRecord.<init>(ObjRec ord.java:61)

Y este es el codigo:

public class HSSF1
{
private HSSFWorkbook workbook=new HSSFWorkbook();
private FileInputStream inputfile;
private FileOutputStream outputfile;

public HSSF1(){}

public HSSFWorkbook getWorkbook(String s){

try{
inputfile=new FileInputStream(s);
workbook=new HSSFWorkbook(inputfile);
}catch(Exception e ){
System.out.println("error!!!!!!!!!!!!!!!!"+e.getMe ssage());
}
return workbook;
}

}

public class comActionLeerExcel extends Action
{
private static Logger logger = Logger.getLogger(comActionCrearExcel.class.getName ());

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
try{

HSSF1 example = new HSSF1();

HSSFWorkbook xls=example.getWorkbook("C://kerman.xls");
HSSFSheet sheet=xls.getSheetAt(0);
for (int j=9; j<17;j++){
HSSFRow row=sheet.getRow(j);

HSSFCell cell;
int tipo;

String s="";

cell=row.getCell((short)1);

switch(cell.getCellType()){

case cell.CELL_TYPE_FORMULA:
s =s+ cell.getNumericCellValue();
Double amount = new Double(s);
NumberFormat numberFormatter;
numberFormatter = NumberFormat.getNumberInstance();
s = numberFormatter.format(amount);
break;

case cell.CELL_TYPE_NUMERIC:
s=s+cell.getNumericCellValue();
Double amounts = new Double(s);
NumberFormat numberFormatters;
numberFormatters = NumberFormat.getNumberInstance();
s = numberFormatters.format(amounts);
break;

}
System.out.println("s"+s);
s="";
}


HSSFRow row=sheet.getRow(17);
Date p=null;
HSSFCell cell=row.getCell((short)1);
p=cell.getDateCellValue();
SimpleDateFormat formatDate = new SimpleDateFormat("dd-MM-yyyy");
String fecha = formatDate.format(p);
System.out.println("p"+ fecha);

return (mapping.findForward("exito"));

}catch(Exception e){
request.setAttribute("exception",e);
return(mapping.findForward("error"));
}
}
}
  #2 (permalink)  
Antiguo 24/11/2005, 15:34
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
hola amigo yo quiero hacer con exel tengo que exportar una tabla de mi exel a mi bd como hago...? please.. como leo el exel ..?
  #3 (permalink)  
Antiguo 25/11/2005, 08:08
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 54
Antigüedad: 20 años, 1 mes
Puntos: 0
este es el codigo para leer el excel!!

public class HSSF1
{
private HSSFWorkbook workbook=new HSSFWorkbook();
private FileInputStream inputfile;
private FileOutputStream outputfile;

public HSSF1(){}

/*

Creamos el workbook que sirve para leer el excel, le pasamos un parametro que es la path completo de donde se encuentra en excel

*/
public HSSFWorkbook getWorkbook(String s){

try{
inputfile=new FileInputStream(s);
workbook=new HSSFWorkbook(inputfile);
}catch(Exception e ){
System.out.println("error!!!!!!!!!!!!!!!!"+e.getMe ssage());
}
return workbook;
}

}

/*

Clase que lee el excel

*/

public class comActionLeerExcel extends Action
{
private static Logger logger = Logger.getLogger(comActionCrearExcel.class.getName ());

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
try{

HSSF1 example = new HSSF1();

/* creamos un HSSFWorkbook con nuestro excel */
HSSFWorkbook xls=example.getWorkbook("C://kerman.xls");

/* Elegimos la hoja que queremos leer del excel */
HSSFSheet sheet=xls.getSheetAt(0);

/* Nos recorremos las filas */
for (int j=9; j<17;j++){

/* Cogemos una fila HSSFRow row=sheet.getRow(fila);*/
HSSFRow row=sheet.getRow(j);

HSSFCell cell;
int tipo;

String s="";

/* cogemos la celda que deseamos cell=row.getCell((short)celda);
cell=row.getCell((short)1);

switch(cell.getCellType()){

case cell.CELL_TYPE_FORMULA:
s =s+ cell.getNumericCellValue();
Double amount = new Double(s);
NumberFormat numberFormatter;
numberFormatter = NumberFormat.getNumberInstance();
s = numberFormatter.format(amount);
break;

case cell.CELL_TYPE_NUMERIC:
s=s+cell.getNumericCellValue();
Double amounts = new Double(s);
NumberFormat numberFormatters;
numberFormatters = NumberFormat.getNumberInstance();
s = numberFormatters.format(amounts);
break;

}
System.out.println("s"+s);
s="";
}


HSSFRow row=sheet.getRow(17);
Date p=null;
HSSFCell cell=row.getCell((short)1);
p=cell.getDateCellValue();
SimpleDateFormat formatDate = new SimpleDateFormat("dd-MM-yyyy");
String fecha = formatDate.format(p);
System.out.println("p"+ fecha);

return (mapping.findForward("exito"));

}catch(Exception e){
request.setAttribute("exception",e);
return(mapping.findForward("error"));
}
}
}o la implementacion de la lectura del excel
  #4 (permalink)  
Antiguo 25/11/2005, 14:15
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
gracias te agradesco un monto... hasta la proxima espero que mas adelante tambien pueda contribuir con el foro..
  #5 (permalink)  
Antiguo 25/11/2005, 14:19
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
tego que importar alguna libreria...? para el Action
  #6 (permalink)  
Antiguo 25/11/2005, 14:28
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
como lo implemento ...? no reconoce el ide.. las clases estoy usando net bean 4.1
gracias ..
  #7 (permalink)  
Antiguo 25/11/2005, 16:58
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 54
Antigüedad: 20 años, 1 mes
Puntos: 0
Hola yo estoy utilizando Struts, no se que estas usando tu, y si hay que incorporar varias librerias, creo que son jxl.jar y poi.jar
  #8 (permalink)  
Antiguo 26/11/2005, 12:00
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
aya ya comprendo structs de jakarta creo que trae todo esos driver... gracias voy a probarlo...
un saludo.
  #9 (permalink)  
Antiguo 28/11/2005, 10:03
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
aun sigo sin resolver no puedo copilar el codigo... alguin puede ayudarme.. no estoy usando struct ni otro framework solo jsp y javabean
  #10 (permalink)  
Antiguo 30/11/2005, 08:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
Antigüedad: 19 años, 2 meses
Puntos: 0
alguin sabe como hacer esto sin usar struct
  #11 (permalink)  
Antiguo 16/02/2006, 13:13
 
Fecha de Ingreso: febrero-2006
Mensajes: 1
Antigüedad: 18 años, 2 meses
Puntos: 0
Busqueda Consulta para kerman1980

Hola, vi tu codigo en el foro, me gustaria saber que librerias estan usando , porque no encuentro en ningun lugar de la red el : jxl.jar .
Si pudieras decirme donde encontrarlo o enviarmelo.
Te lo agradeceria muchisimo.

atte

Lorenita
  #12 (permalink)  
Antiguo 17/02/2006, 13:10
 
Fecha de Ingreso: febrero-2006
Mensajes: 5
Antigüedad: 18 años, 2 meses
Puntos: 0
el manejo de archivos d Office necesita el poi.jar
  #13 (permalink)  
Antiguo 04/05/2006, 15:07
Avatar de LoganNeoZero  
Fecha de Ingreso: diciembre-2004
Ubicación: Cochabamba
Mensajes: 106
Antigüedad: 19 años, 4 meses
Puntos: 0
que import tengo que poner... encontre las librerias en www.apache.org y me meti en jakarta y baje unas librerias, espero que sean esas de poi ... ahora tengo un dilema..... que pongo en import???? porq no me lo reconoce ... bueno haber si aclaran esito mas por favor.
atte. Nivardo
  #14 (permalink)  
Antiguo 04/05/2006, 15:10
Avatar de LoganNeoZero  
Fecha de Ingreso: diciembre-2004
Ubicación: Cochabamba
Mensajes: 106
Antigüedad: 19 años, 4 meses
Puntos: 0
Bueno viendo el jar encontre q cosa tengo que importar es esto...import org.apache.poi.*;

bueno con eso .. espero no tener ningun problema...bye bye
  #15 (permalink)  
Antiguo 05/05/2006, 00:35
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 54
Antigüedad: 20 años, 1 mes
Puntos: 0
Perdon pero repasando el codigo me he dado cuenta que solo hace falta la libreria jxl. Adjunto todos los import que tengo:

import java.io.*;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.*;
import java.text.*;
import javax.swing.plaf.ColorUIResource;

import jxl.*;
import jxl.write.WritableFont;
import jxl.write.*;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.File;
  #16 (permalink)  
Antiguo 25/10/2006, 09:10
 
Fecha de Ingreso: noviembre-2005
Mensajes: 19
Antigüedad: 18 años, 5 meses
Puntos: 0
amigo kerman1980 si estas empleando poi una de las limitaciones es justamente trabajar con macros.

salu2
  #17 (permalink)  
Antiguo 25/10/2006, 10:43
 
Fecha de Ingreso: noviembre-2004
Mensajes: 5
Antigüedad: 19 años, 6 meses
Puntos: 0
alguien me podria echar una alluda hice este codigo para leer archivos pero es muy lento para archivos muy grandes estuve leyendo y me encontre con un StringBuffer con esto segun lo leiria mas rapido pero no se como implementarlo me podrian decir como o almenos como quedaria el codigo gracias...

import java.io.RandomAccessFile;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Visor{
private String archivo;
public Visor (String archivo){
this.archivo=archivo;
}

public String leer(){

RandomAccessFile raf;
String texto="";
try{
String linea = null;
raf = new RandomAccessFile(this.archivo, "r");
while((linea=raf.readLine())!=null){
texto=texto+linea+"\n";//concatenacion
}

raf.close();
}
catch(FileNotFoundException fnfe){
System.out.println("Archivo no econtrado");

}
catch(IOException ioe){
System.out.println("Error de I/O.");
}

return texto;

}

}
  #18 (permalink)  
Antiguo 25/10/2006, 11:48
 
Fecha de Ingreso: noviembre-2004
Mensajes: 5
Antigüedad: 19 años, 6 meses
Puntos: 0
ya ise esto pero como puedo hacer que leea otros archivos o que me falta que mejoras puede tener pofavor ayudenme con el codigo

import java.io.*;
import java.io.RandomAccessFile;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ArchivoApp2 {
public static void main(String[] args) {
FileReader entrada=null;
StringBuffer str=new StringBuffer();
try {
entrada=new FileReader("ArchivoApp2.java");
int c;
while((c=entrada.read())!=-1){
str.append((char)c);
}
System.out.println(str);
System.out.println("--------------------------------------");
}catch (IOException ex) {
System.out.println(ex);
}finally{
//cerrar los flujos de datos
if(entrada!=null){
try{
entrada.close();
}catch(IOException ex){}
}
System.out.println("el bloque finally siempre se ejecuta");
}
try {
//espera la pulsación de una tecla y luego RETORNO
System.in.read();
}catch (Exception e) {
}
}
}
  #19 (permalink)  
Antiguo 03/01/2007, 12:14
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Leer Excel desde java.

Saben necesito que alguien me ayude con esto de excel y java, estoy haciendo un pequeño programita para analisis de inversiones y quiero calcular la TIR y pensaba hacerlo en excel e importarlo a java, el problema es que quiero pasar con conjunto de enteros y poder escribirlos en excel y luego calcular la TIR en excel con los datos que le envio desde java y capturar ese dato que seria la TIR, como puedo hacerlo?, por favor si alguien puede ayudarme se los agradeceria mucho.
  #20 (permalink)  
Antiguo 24/04/2007, 22:58
Avatar de juniorov  
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Sonrisa Re: Leer Excel desde java.

Hola estaba leyendo que tu necesitaste leer archivos excel en java y queria saber si me puedes ayudar. como hago para leer esos archivos en java que tengo que configurar yo el programa que estoy usando es el eclipse que tengo que hacerle y que tengo que bajar para poder correr los programas?
  #21 (permalink)  
Antiguo 02/05/2007, 14:27
Avatar de mastercarl  
Fecha de Ingreso: agosto-2005
Mensajes: 2
Antigüedad: 18 años, 8 meses
Puntos: 0
Re: Leer Excel desde java.

hola necesito ayuda al leer el archivo en excel ya que si sobrepasa de 5 MB me manda el siguiente error
java.lang.OutOfMemoryError

File Fil = new File("C:/TEMP/temporal.xls");
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(Fil));

//al generar el objeto HSSFWorkbook es cuando me manda la exception
HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(sheet.getFirstRowNum());

for(int i = sheet.getFirstRowNum()+1;i<=sheet.getLastRowNum(); i++ ){

HSSFCell cell0 = row.getCell((short)0);

switch (cell0.getCellType()){
case HSSFCell.CELL_TYPE_NUMERIC:
int valor=cell0.getNumericCellValue();
case HSSFCell.CELL_TYPE_STRING:
String str=cell0.getStringCellValue();
break;

}
}

funciona perfectamente mi metodo al leer algun excel, pero solo es con los archivos que su tamaño sobrepasen de 5 MB ¿cómo puedo leer el archivo pero por pedazos ya que los archivos que tengo que leer, su tamaño es de mas de 5MB hasta 15 MB ? o algo asi o que me sugieren

salu2
  #22 (permalink)  
Antiguo 09/05/2007, 06:59
 
Fecha de Ingreso: mayo-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: Leer Excel desde java.

Tengo un problema tengo que parsear un Excel en el cual me puedes venir caracteres de diversos idiomas, ya puede ser chino, japones, español, etc.
tambien me llegan caracteres especiales del excel esos que te cambia y te los pone mas bonitos, etc.

al parsearlos muy bien para una vez que quiero que los tengo guardados en objetos de java al mostralor por la consolo lo unico que me muestra son ???????

Alguien me puede ayudar sobre este tema

No se si me habre explicado bien.
  #23 (permalink)  
Antiguo 20/07/2007, 15:29
 
Fecha de Ingreso: julio-2007
Mensajes: 6
Antigüedad: 16 años, 9 meses
Puntos: 0
Necesito Ayuda

Como logro hacer que java me cree un documento de excel y con esto mandarle
datos para que excel me realice un grafico con los datos que envie
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:20.