Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Leer Excel desde java. (http://www.forosdelweb.com/f45/leer-excel-desde-java-352592/)

kerman1980 24/11/2005 09:27

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"));
}
}
}

abieliseo 24/11/2005 15:34

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 ..?

kerman1980 25/11/2005 08:08

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

abieliseo 25/11/2005 14:15

gracias te agradesco un monto... hasta la proxima espero que mas adelante tambien pueda contribuir con el foro..

abieliseo 25/11/2005 14:19

tego que importar alguna libreria...? para el Action

abieliseo 25/11/2005 14:28

como lo implemento ...? no reconoce el ide.. las clases estoy usando net bean 4.1
gracias ..

kerman1980 25/11/2005 16:58

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

abieliseo 26/11/2005 12:00

aya ya comprendo structs de jakarta creo que trae todo esos driver... gracias voy a probarlo...
un saludo.

abieliseo 28/11/2005 10:03

aun sigo sin resolver no puedo copilar el codigo... alguin puede ayudarme.. no estoy usando struct ni otro framework solo jsp y javabean

abieliseo 30/11/2005 08:53

alguin sabe como hacer esto sin usar struct

MariaLorenitas 16/02/2006 13:13

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

Rodrigo Salazar 17/02/2006 13:10

el manejo de archivos d Office necesita el poi.jar

LoganNeoZero 04/05/2006 15:07

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 04/05/2006 15:10

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

kerman1980 05/05/2006 00:35

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;

jodyhelmut 25/10/2006 09:10

amigo kerman1980 si estas empleando poi una de las limitaciones es justamente trabajar con macros.

salu2

scan62 25/10/2006 10:43

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 25/10/2006 11:48

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) {
}
}
}

morf 03/01/2007 12:14

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.

juniorov 24/04/2007 22:58

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?

mastercarl 02/05/2007 14:27

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

balthasar 09/05/2007 06:59

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.

lumorux 20/07/2007 15:29

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


La zona horaria es GMT -6. Ahora son las 04:50.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.