![]() |
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")); } } } |
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 ..? |
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 |
gracias te agradesco un monto... hasta la proxima espero que mas adelante tambien pueda contribuir con el foro.. |
tego que importar alguna libreria...? para el Action |
como lo implemento ...? no reconoce el ide.. las clases estoy usando net bean 4.1 gracias .. |
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 |
aya ya comprendo structs de jakarta creo que trae todo esos driver... gracias voy a probarlo... un saludo. |
aun sigo sin resolver no puedo copilar el codigo... alguin puede ayudarme.. no estoy usando struct ni otro framework solo jsp y javabean |
alguin sabe como hacer esto sin usar struct |
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 |
el manejo de archivos d Office necesita el poi.jar |
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 |
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 |
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; |
amigo kerman1980 si estas empleando poi una de las limitaciones es justamente trabajar con macros. salu2 |
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; } } |
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) { } } } |
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. |
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? |
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 |
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. |
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.