Java - Recorrer archivo excel

 
Vista:

Recorrer archivo excel

Publicado por David (2 intervenciones) el 07/09/2007 09:23:37
Hola a todos. Tengo un problemilla con una parte del codigo de mi programa. Este consiste en recorrer un ficherito excel hacer una serie de calculos, grabar datos en una base de datos MySql, y sacar un resultado en un Jsp. El problema viene cuando recorre un campo determinado que al parecer es mayor del tamaño definido y canta el siguiente error:

java.sql.SQLException: null, message from server: "Data truncated for column 'TaskId' at row 1"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1876)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1098)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1192)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1153)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2048)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2005)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1252)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1198)
at filesmanagement.ToImport.ImportTasks(ToImport.java:268)
at theservlets.importer.processRequest(importer.java:66)
at theservlets.importer.doPost(importer.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter

La parte de codigo en la que falla es la siguiente:

for (int k=0; k<colsToImport.length;k++) {
j=colsToImport[k];
cell = row.getCell((short)j);

System.out.println("Cell es :"+ cell); /**********/
System.out.println("++++++++++++++++ j = "+j); /**********/

chaine=" ";
if (cell != null) {
if ( cell.getCellType() == cell.CELL_TYPE_STRING ) {
System.out.println("si la cell es null y String"); /**********/
chaine = cell.getStringCellValue();
System.out.println("chaine = "+chaine); /**********/
}
if ( cell.getCellType() == cell.CELL_TYPE_NUMERIC ) {
System.out.println("si la cell es null y Numeric"); /**********/
chaine = Double.toString(cell.getNumericCellValue());
System.out.println("chaine = "+chaine); /**********/
}
if ( j<11 && j>8 ) {
System.out.println("si j<11 y j>8"); /**********/
chaine = df.format(cell.getDateCellValue());
System.out.println("chaine = "+chaine);
if (chaine.compareTo(" ")==0 )
chaine="0000-00-00 00:00:00";
}
}
else {
System.out.println("si la cell NO es null"); /**********/
if (j<11 && j>8)
chaine="0000-00-00 00:00:00";
}


if (j==11) {
System.out.println("si j=11"); /**********/
sqlInsert += "'"+chaine+"')";
}
else {
System.out.println("si j NO es 11"); /**********/
sqlInsert += "\""+chaine+"\",";
}


}
System.out.println(i);

System.out.println("sqlInsert es :"+ sqlInsert); /**********/

sta.executeUpdate(sqlInsert); /** Aqui es donde canta el error **/
}

Como vereis ahora el problema viene cuando ejecuta la query en: "sta.executeUpdate(sqlInsert);", justo cuando la variable chain almacena el valor de la celda del excel mayor en tamaño.(10009148)
A la hora de depurarlo impreme esto:

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@103c29b

++++++++++++++++ j = 7

si la cell es null y Numeric

chaine = 1.0009148E7

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1dd7bc5

++++++++++++++++ j = 6

si la cell es null y Numeric

chaine = 5058812.0

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1e8c585

++++++++++++++++ j = 0

si la cell es null y String

chaine = 5013757

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@ffa6eb

++++++++++++++++ j = 4

si la cell es null y String

chaine = Working

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@27cd63

++++++++++++++++ j = 5

si la cell es null y String

chaine = I7

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@11d3226

++++++++++++++++ j = 9

si la cell es null y Numeric

chaine = 39293.495104166665

si j<11 y j>8

chaine = 2007-07-30 11:52:57

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1c79dfc

++++++++++++++++ j = 10

si la cell es null y Numeric

chaine = 39293.495104166665

si j<11 y j>8

chaine = 2007-07-30 11:52:57

si j NO es 11

Cell es :org.apache.poi.hssf.usermodel.HSSFCell@553763

++++++++++++++++ j = 11

si la cell es null y Numeric

chaine = 0.0

si j=11

17

sqlInsert es :INSERT INTO task VALUES ("1.0009148E7","5058812.0","5013757","Working","I7","2007-07-30 11:52:57","2007-07-30 11:52:57",'0.0')

Como podeis ver el registro anterior lo graba correctamente pero al llegar al de 8 dijitos parece que no lo coge correctamente y coge este valor en su lugar "1.0009148E7".

Espero que me podais ayudar lo antes posible. Me estoy volviendo loco XD. Un saludo. Y gracias a todos. Felicidades por este foro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Recorrer archivo excel

Publicado por Mugutu (11 intervenciones) el 07/09/2007 15:07:21
Si puedes prueba a abrir el excel y darle formato a la columna que está dando error, indícale que es de tipo numérico y debería cambiarte el valor "1.0009148E7" por el numero que contiene cada celda.

A mi me ocurría que al cargar un fichero de texto separado por tabulaciones no me interpretaba bien una columna numerica y ponía algo parecido a "1.0009148E7". Con lo que te he comentado más arriba se solucionó.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer archivo excel

Publicado por David (2 intervenciones) el 10/09/2007 10:07:59
Pues muchas gracias tio...aunque no he podido solucionarlo como me dices...he puesto el formato de la columna de tipo numerico sin decimales pero me sigue fallando en el mismo sitio y el mismo error. No podria ser q en la instruccion "chaine = Double.toString(cell.getNumericCellValue());" hubiera que cambiar algo ?.
Gracias nuevamente por interesarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar