none
Excel con ASP. Problemas con algunas celdas. RRS feed

  • Pregunta

  • Hola a todos.

    Estoy recogiendo varias celdas de un excel mediante un asp.

    Mi problema es que algunas de las celdas me las lee y otras no. Si en la primera celda el contenido es un número, me muestra solo los numeros del rango, y si el contenido de la primera celda es una palabra o letra solo me  muestra lo que no es un número.

    ¿Me podeis ayudar?. Os dejo el código ha ver que os parece. 

    Muchas gracias a todos.

    -----------------------
    <%
    miPath = Server.MapPath(
    "..\..\prueba\prueba1\excelprueba.xls")
    'Establece una conexión entre el servidor asp y una base de datos
    Set ConexionBD = Server.CreateObject("ADODB.Connection"
    )
    'Abrimos el objeto con el driver específico para Microsoft Excel
    ConexionBD.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ="
    & miPath

    'Abrimos un recordset con las celdas seleccionadas
    sSql =
    "Select * From [G3$D15:D18]"
    Set rsCol = Server.CreateObject("ADODB.Recordset"
    )
    rsCol.Open sSql, ConexionBD,3,3
    rsCol.MoveFirst
    do while not
    rsCol.EOF 
        sResultado = sResultado & rsCol.Fields(0).Value 
        rsCol.MoveNext
    loop
    rsCol.Close
    %>

    viernes, 27 de marzo de 2009 17:59

Respuestas

  • Hola Generalmente esto pasa cuando las celdas de excel tienen otro formato en la misma columna.

    tengo entendido que cuando se leen los datos de la hoja lee solo las primeras 8 celdas para definir el tipo de dato que va a leer y si los que estan despues son diferentes no los lee o te regresa null.


    agrega esto a tu cadena de conexion

    Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'

    a mi me funciona en la mayoria de los casos.

    en caso de que no te funcion al 100% puedes modificar el registro.


    HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\ENGINES\ TYPEGUESSROWS y aqui modificas su valor a 0 para que verifique todos los registros de la columna.

    te paso este link para que lo veas mas detalladamente.

    Estpero te sirva
    Saludos.
    • Propuesto como respuesta Jesús Bosch sábado, 4 de abril de 2009 7:48
    • Marcado como respuesta Juanillo25 martes, 21 de abril de 2009 7:35
    jueves, 2 de abril de 2009 16:50

Todas las respuestas

  • Trabajar con excel, a veces es una basuuraaa...

    Yo tengo un Upload automatico desde un excel, pero desde .Net, y a veces no reconocia ciertos campos cuando cambiaba de formato. Lo que hice era mover el Row 50, o por ahi, al Row 3, y ya reconocía.

    No se que tanto se aplica esta solucion a tu caso, pero si a los numeroes le pones apostrofe ('), antes del numero, todos seran texto, y ya no tendrás problemas.

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    martes, 31 de marzo de 2009 20:09
  • Sunpongo que ya has vito que en el "FROM" estás limitando el rango en la pestaña llamada G3 a las celdas D15 a D18.

    Dicho esto, yo provaría a hacer

     Response.Write(rs("nombreColumna") & "<br/>")

    y no

    sResultado = sResultado & rsCol.Fields(0).Value

    Para ver que datos salen
    Blog de desarrollo / Development blog
    martes, 31 de marzo de 2009 20:10
  • Hola Generalmente esto pasa cuando las celdas de excel tienen otro formato en la misma columna.

    tengo entendido que cuando se leen los datos de la hoja lee solo las primeras 8 celdas para definir el tipo de dato que va a leer y si los que estan despues son diferentes no los lee o te regresa null.


    agrega esto a tu cadena de conexion

    Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'

    a mi me funciona en la mayoria de los casos.

    en caso de que no te funcion al 100% puedes modificar el registro.


    HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\ENGINES\ TYPEGUESSROWS y aqui modificas su valor a 0 para que verifique todos los registros de la columna.

    te paso este link para que lo veas mas detalladamente.

    Estpero te sirva
    Saludos.
    • Propuesto como respuesta Jesús Bosch sábado, 4 de abril de 2009 7:48
    • Marcado como respuesta Juanillo25 martes, 21 de abril de 2009 7:35
    jueves, 2 de abril de 2009 16:50
  • Hola

    No respondo respecto a tu consulta de los datos via dao.La respuesta va con respecto a una posibilidad dependiendo de que quieras hacer. No estoy seguro que lo que quieras hacer es en el server, esto te puede ayudar si estas leyendo en el cliente de asp

    Si quieres manipular un poco las celdas existe un objeto framer que te puede auxiliar. Lo puedes encontrar en: http://support.microsoft.com/kb/311765 . En esta liga busca el download del framer. Este objeto es un ocx que te permite abrir los archivos de office sin necesidad de tener office instalado en el cliente.

    Cuando abre el archivo en el framer  (invisible o visible) puedes accesar los datos via JS. Asi podrias extrar datos sin necesidad de subir el archivo a tu pagina o tenerlo del lado servidor.

    Dentro del instalador hay ejemplos muy buenos de como accesar.

    Espero que te sirva.

    Saludos y suerte
    sábado, 4 de abril de 2009 2:05
  • Buenas!
    yo me encontré con un problema parecido al tuyo pero con csv. Mirate este enlace:

    http://www.connectionstrings.com/excel

    Yo tuve que utilizar el fichero schema.ini para indicarle al adodb qué tipo de campos va a leer.

    Saludos!!
    Diego Torres López
    Blog: Blog de .Net
    Blog 360: Blog de Xbox 360
    martes, 14 de abril de 2009 15:11
  • Perdonar por la tardanza en responder.

    Sergio, en efecto el problema viene dado por el formato de las celdas. Me es imposible modificar el formato ya que el excel me viene dado y es imposible modificarlo.

    Garcias
    martes, 21 de abril de 2009 6:52
  • Perdonar por la tardanza en responder.

    J.Bosch, en efecto en despues del FROM limito el rango de las celdas a una pestaña y tres celdas. Era un ejemplo ya que el excel tiene una cantidad bastante grande de pestañas y de celdas no quiero ni contarlas.

    Referente al utilizar response como me indicas, no es que necesite mostrar el resultado del RS, lo recogo en una variable para luego guardar los datos en server.

    Gracias
    martes, 21 de abril de 2009 6:57
  • Perdonar por la tardanza en responder.

    Cristian, he provado con el agregado que me propones y me funciona cuando leo alguna de las hojas, en otras no, pero sigo por este camino.

    Referente al registro me es imposible modificarlo ya que no tengo acceso a él.

    Gracias.
    martes, 21 de abril de 2009 7:13
  • Perdonar por la tardanza en responder.

    Arturo, gracias por el enlace. Aunque no puedo utilizar lo que propone lo tengo en cuenta para otros casos que se me van a dar.

    Gracias.

    martes, 21 de abril de 2009 7:15
  • Diego, gracias por el enlace. tomo nota.

    Gracias

    martes, 21 de abril de 2009 7:16
  • Gracias a todos por las ideas, la verdad es que todas las respuestas recogian algunos de los problemas que he tenido.

    Despues de darle vueltas al tema, el problema era que los archivos (aunque partian de una plantilla) que tenia que leer venian con todo tipo de "modificaciones" realizadas por los usuarios que rellenaban los datos. Esa era la razón principal. Despues de un estiron de orejas solucionado.

    Por lo demas el código, partiendo de la base que os indique, ma ha funcionado (he añadido lo que comentaba Cristian).

    Muchas gracias a todos.
    martes, 21 de abril de 2009 7:32