Retroceder   Foros del Web > Programación para sitios web > Java y JSP

Respuesta
 
Herramientas Desplegado
Antiguo 24-nov-2005, 08:27   #1 (permalink)
kerman1980 está en el buen camino
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 55
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"));
}
}
}
kerman1980 está desconectado   Responder Citando
Antiguo 24-nov-2005, 14:34   #2 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
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 ..?
abieliseo está desconectado   Responder Citando
Antiguo 25-nov-2005, 07:08   #3 (permalink)
kerman1980 está en el buen camino
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 55
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
kerman1980 está desconectado   Responder Citando
Antiguo 25-nov-2005, 13:15   #4 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
gracias te agradesco un monto... hasta la proxima espero que mas adelante tambien pueda contribuir con el foro..
abieliseo está desconectado   Responder Citando
Antiguo 25-nov-2005, 13:19   #5 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
tego que importar alguna libreria...? para el Action
abieliseo está desconectado   Responder Citando
Antiguo 25-nov-2005, 13:28   #6 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
como lo implemento ...? no reconoce el ide.. las clases estoy usando net bean 4.1
gracias ..
abieliseo está desconectado   Responder Citando
Antiguo 25-nov-2005, 15:58   #7 (permalink)
kerman1980 está en el buen camino
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 55
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
kerman1980 está desconectado   Responder Citando
Antiguo 26-nov-2005, 11:00   #8 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
aya ya comprendo structs de jakarta creo que trae todo esos driver... gracias voy a probarlo...
un saludo.
abieliseo está desconectado   Responder Citando
Antiguo 28-nov-2005, 09:03   #9 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
aun sigo sin resolver no puedo copilar el codigo... alguin puede ayudarme.. no estoy usando struct ni otro framework solo jsp y javabean
abieliseo está desconectado   Responder Citando
Antiguo 30-nov-2005, 07:53   #10 (permalink)
abieliseo ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 125
alguin sabe como hacer esto sin usar struct
abieliseo está desconectado   Responder Citando
Antiguo 16-feb-2006, 12:13   #11 (permalink)
MariaLorenitas ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2006
Mensajes: 1
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
MariaLorenitas está desconectado   Responder Citando
Antiguo 17-feb-2006, 12:10   #12 (permalink)
Rodrigo Salazar ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2006
Mensajes: 5
el manejo de archivos d Office necesita el poi.jar
Rodrigo Salazar está desconectado   Responder Citando
Antiguo 04-may-2006, 15:07   #13 (permalink)
LoganNeoZero ha deshabilitado el karma
 
Avatar de LoganNeoZero
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cochabamba
Mensajes: 103
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
LoganNeoZero está desconectado   Responder Citando
Antiguo 04-may-2006, 15:10   #14 (permalink)
LoganNeoZero ha deshabilitado el karma
 
Avatar de LoganNeoZero
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cochabamba
Mensajes: 103
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
LoganNeoZero está desconectado   Responder Citando
Antiguo 05-may-2006, 00:35   #15 (permalink)
kerman1980 está en el buen camino
 
Fecha de Ingreso: marzo-2004
Ubicación: bilbo
Mensajes: 55
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;
kerman1980 está desconectado   Responder Citando
Antiguo 25-oct-2006, 09:10   #16 (permalink)
jodyhelmut ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2005
Mensajes: 16
amigo kerman1980 si estas empleando poi una de las limitaciones es justamente trabajar con macros.

salu2
jodyhelmut está desconectado   Responder Citando
Antiguo 25-oct-2006, 10:43   #17 (permalink)
scan62 ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 5
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;

}

}
scan62 está desconectado   Responder Citando
Antiguo 25-oct-2006, 11:48   #18 (permalink)
scan62 ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2004
Mensajes: 5
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) {
}
}
}
scan62 está desconectado   Responder Citando
Antiguo 03-ene-2007, 11:14   #19 (permalink)
morf ha deshabilitado el karma
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4
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.
morf está desconectado   Responder Citando
Antiguo 24-abr-2007, 22:58   #20 (permalink)
juniorov ha deshabilitado el karma
 
Avatar de juniorov
 
Fecha de Ingreso: abril-2007
Mensajes: 2
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?
juniorov está desconectado   Responder Citando
Antiguo 02-may-2007, 14:27   #21 (permalink)
mastercarl ha deshabilitado el karma
 
Avatar de mastercarl
 
Fecha de Ingreso: agosto-2005
Mensajes: 2
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
mastercarl está desconectado   Responder Citando
Antiguo 09-may-2007, 06:59   #22 (permalink)
balthasar ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2007
Mensajes: 2
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.
balthasar está desconectado   Responder Citando
Antiguo 20-jul-2007, 15:29   #23 (permalink)
lumorux ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Mensajes: 6
Idea 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
lumorux está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Desactivado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 13:33.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93