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

Como pasar un excel a java ?

Estas en el tema de Como pasar un excel a java ? en el foro de Java en Foros del Web. Hola amigos del foro les cuento yo hace un rato e tratado de sacar este código el cual es ocupando apache poi para pasar archivos ...
  #1 (permalink)  
Antiguo 11/09/2013, 09:18
 
Fecha de Ingreso: septiembre-2013
Mensajes: 9
Antigüedad: 10 años, 7 meses
Puntos: 0
Exclamación Como pasar un excel a java ?

Hola amigos del foro les cuento yo hace un rato e tratado de sacar este código el cual es ocupando apache poi para pasar archivos xls xlms ajava y luego a una base de datos lo que pasa es que cuando le ejecuto me deja la variable (el archivo que le cargo ) me lo deja null y se me cae y me tira lo siguente java.lang.NullPointerException se que esto es por que no me setea el archivo me lo deja en null si me pudieran ayudar seria lo mejor gracias les dejo el codigo para que le echen un vistaso



public void handleFileUpload(FileUploadEvent fileUpload) throws IOException, InvalidFormatException {
RequestContext context = RequestContext.getCurrentInstance();
List<Excel> excels = new ArrayList<Excel>();
try {
String fileName = fileUpload
.getFile()
.getFileName()
.substring(
fileUpload.getFile().getFileName()
.indexOf("."));
// Store file in user home
copyFile(fileName, fileUpload.getFile().getInputstream());
// Get stored file
File file = new File(System.getProperty("user.home") + "/"
+ fileName);
// Get the workbook instance for XLS file
Workbook workbook = WorkbookFactory
.create(new FileInputStream(file));
// Get first sheet from the workbook
Sheet sheet = workbook.getSheetAt(0);
// Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Excel exc = new Excel();
System.out.println("A1 :" + " ");
System.out.println("b1 :" + " ");
System.out.println("c1 :" + " ");
excels.add(exc);
}
} catch (IOException e) {
System.out.println(e);
}
}

/**
* Save uploaded File into user home dir
*
* @param fileName
* @param in
*/
private void copyFile(String fileName, InputStream in) {
try {
OutputStream out = new FileOutputStream(new File(
System.getProperty("user.home") + "/" + fileName));

int read = 0;
byte[] bytes = new byte[1024];

while ((read = in.read(bytes)) != -1) {
out.write(bytes, 0, read);
}

in.close();
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}



Saludos
  #2 (permalink)  
Antiguo 11/09/2013, 11:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Como pasar un excel a java ?

Si lo que quieres es leer el archivo y guardar cada fila en una tabla de tu base de datos puedes usar algo como esto que he hecho yo, solo tendrias que mejorarlo segun lo que requieras, porque en este codigo le he quitado muchas validaciones y procedimientos extras que uso yo para mi caso... Ahi deberas ir agregando lo que necesites, solo te pondre como lo basico practicamente:

Código:
private void cargarArchivo(){
                           File bow = null;
			   FileReader freader = null;
                           CsvReader datos = null;
			   String rutaarch = "C:\\OPArchivos\\docCarga.xls";
			   bow = new File(rutaarch);
                           freader = new FileReader(bow);
                           datos = new CsvReader(freader);
			   int contador = 0;
			   int cantidadCamposArchivo = 10;
			   while (datos.readRecord()){
					for (i=0;i<cantidadCamposArchivo;i++){ //queda con < porque la primera posicion es 0
						sql = "insert into " + TuBase + "." + TuTabla + "(" + TusCampos + ") values (";
						sql += datos.get(i);
						if(contador < cantidadCamposArchivo){
							sql+=",";
							contador++;
						}else{
							sql+=")";
							//llamar funcion para insertar: ejm: insertarValor(sql);
							sql = "";
							contador = 0;
						}
					}
				}
                         datos.close();
		}
En mi caso yo armo dinamicamente el query del insert para ir guardando fila por fila a travez de otra funcion a la cual unicamente le envio el query ya armado y hago el execute.

Como nota importante la variable cantidadCamposArchivo determina cuantas columnas tiene tu archivo, debes establecerle eso para que no intente obtener columnas mas a la derecha de las que requieres, y tener cuidado que llenes la misma cantidad de columnas del archivo que columnas de la tabla hayas especificado en el query.

Espero que te sirva.

Saludos.

Última edición por CRauda; 11/09/2013 a las 11:54 Razón: Hacia falta un for
  #3 (permalink)  
Antiguo 11/09/2013, 12:17
 
Fecha de Ingreso: septiembre-2013
Mensajes: 9
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Como pasar un excel a java ?

Y si quiera enviarlo como un paso de parametros mediante un FileUpload ? me sirviria

y la instrucción sql seria algo así si mi tabla se llama excel mi base guemac y mis campos son hombre dia y hora por ejemplo

"insert into"+"Guemac"+"."+"excel"+"("nombre+dia+hora")val ues("nombre,dia,hora")(";


y otra pregunta que quieres decir con esta expresión")" o "("

Última edición por RodrigoGuzman; 11/09/2013 a las 12:58
  #4 (permalink)  
Antiguo 11/09/2013, 13:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Como pasar un excel a java ?

Para serte sincero nunca he intentado enviar directamente el excel, pero no esta demas hacer la prueba, sino lo tendrias que hacer como yo que lo envio registro por registro.

lo de "(" y ")" es apertura y cierre de parentesis... si te fijas estoy armando el query que hace el insert dinamicamente segun cada registro del archivo, y los parentesis determinan inicio y fin de declaracion de campos y valores, el query debe quedar de la siguiente forma:

Código:
insert into tabla(campo1,campo2,campo3,...,campoN)
values (valor1,valor2,valor3,..., valorN)
pero si te fijas en la linea:

Código:
sql = "insert into " + TuBase + "." + TuTabla + "(" + TusCampos + ") values (";
dejo el parentesis abierto para ir despues concatenando los valores separados por coma si aun no ha llegado al ultimo valor o colocar el cierre de parentesis si es el ultimo, que eso se hace en la parte:

Código:
if(contador < cantidadCamposArchivo-1){
							sql+=",";
							contador++;
						}else{
							sql+=")";
							//llamar funcion para insertar: ejm: insertarValor(sql);
							sql = "";
							contador = 0;
						}
Cuando el contador es igual a la cantidadCamposArchivo entonces coloca el cierre de parentesis, llama a la funcion que ejecuta el insert, resetea la variable sql y y regresa al contador a 0 para hacer lo mismo con el siguiente registro.

P.D: en la condicion debe ser contador < cantidadCamposArchivos - 1, sino nunca entraras en el else de esa condicion porque el for es mientras i < cantidadCamposArchivos tambien XD

Última edición por CRauda; 11/09/2013 a las 13:30
  #5 (permalink)  
Antiguo 12/09/2013, 08:06
 
Fecha de Ingreso: septiembre-2013
Mensajes: 9
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Como pasar un excel a java ?

hola mira lo mimplemente pero se cae al momento de ingresar al datos = new CsvReader(freader);




asi quedo mi codigo

Código Java:
Ver original
  1. public void leerExcel(FileUploadEvent file) throws FileNotFoundException, IOException {
  2.         File bow = null;
  3.         FileReader freader = null;
  4.         CsvReader datos = null;
  5.         FileUploadEvent ruta = file;
  6.         freader = new FileReader(bow);
  7.         datos = new CsvReader(freader);
  8.         int contador = 0;
  9.         int cantidadCamposArchivo = 10;
  10.         while (datos.readRecord()) {
  11.             for (int i = 0; i < cantidadCamposArchivo; i++) {
  12.                 String sql = "insert into excel(nombre,dia,hora)values(nombre=?,dia=?,hora=?)";
  13.                 sql += datos.get(i);
  14.                 if (contador < cantidadCamposArchivo) {
  15.                     sql = ",";
  16.                     contador += 1;
  17.                 } else {
  18.                     sql += ")";
  19.                     sql = "";
  20.                     contador = 0;
  21.                 }
  22.             }
  23.         }
  24.         datos.close();
  25.     }
  #6 (permalink)  
Antiguo 16/09/2013, 09:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Como pasar un excel a java ?

Para empezar file es un objeto que estas mandando por parametro y dentro de sus metodos tiene la ruta fisica del archivo que subiras, esa ruta fisica es la que necesitas, por ejemplo "C:/Documents and Setting/usuario/Documents/ArchivosCarga/miarchivo.xls" ya que esa ruta es la que sirve para inicializar el freader de manera correcta, por otra parte estas armando mal el query, tu le estas colocando para enviar parametros pero en realidad le sigues poniendo mas abajo una concatenacion, el armado deberia quedar algo asi:

Código:
public void leerExcel(FileUploadEvent file) throws FileNotFoundException, IOException {
        File bow = null;
        FileReader freader = null;
        CsvReader datos = null;
        String ruta = file; //Aca debes obtener la ruta, no el objeto y debe ser String, creo que te quedaria algo asi como file.getFile().getFileName(); aunque no estoy seguro, prueba tu las opciones que encuentres
        bow = new File(ruta); //Luego inicializas el objeto bow con la ruta para que sea leido
        freader = new FileReader(bow);
        datos = new CsvReader(freader);
        int contador = 0;
        int cantidadCamposArchivo = 10;
        while (datos.readRecord()) {
            for (int i = 0; i < cantidadCamposArchivo; i++) {
                String sql = "insert into excel(nombre,dia,hora)values("; //Aca no le agregas parametros, los valores se contatenan en el datos.get(i)
                sql += datos.get(i);
                if (contador < cantidadCamposArchivo - 1) { //Aca debes ponerle el -1 sino nunca entrara en el "else" porque el i igual queda < cantidadCampos
                    sql = ",";
                    contador += 1;
                } else {
                    sql += ")";
                    sql = "";
		    ejecutarQuery(sql); //Aca mandas el query a ejecutarse a la base
                    contador = 0;
                }
            }
        }
        datos.close();
    }
Y ya que veo que no me captaste como lo hacia yo, te muestro, solo que yo trabajo con Struts y Oracle asi que creo que no te servira mi misma funcion, pero es solo para que veas que yo tengo una funcion aparte para executar el query:

Código:
    public void ejecutarQuery(String sql){
	QueryRunner query = new QueryRunner();
        Connection conn = null;
        
        try{
            conn = ds.getConnection();
            query.update(conn,sql,params);
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn.commit();
            conn.close();
        }
		
	}
P.D.: Luego me explicas como haces para que te aparezca como codigo java en el mensaje XD

Última edición por CRauda; 16/09/2013 a las 09:10

Etiquetas: excel, string
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 18:33.