Exportar un Datagrid a Excel

Introducción

Tomando como base las diferentes propuestas presentadas por Ken Walker, Mike Dolan y Scott Michell, en la que la mayoría de estas y otras soluciones ocurre que cuando existen columnas tipo BoundColumn o TemplateColumn que contienen controles tipo Button, LinkButton, CheckBox o Controles Web que necesitan ser puestos dentro de un formulario del lado del servidor, aquellos que pueden provocar un PostBack, mandan un error que dice: "Control ControlID" del Tipo ‘TipoControl" debe estar dentro de un etiqueta form con el atributo runat=server, esto sucede porque el método RenderControl() aplicado al DataGrid (utilizado en la mayoría de las propuestas vistas) invoca recursivamente el mismo método pero de cada control visible que existe en el DataGrid. Este método invoca a otro método que es el Page.VerifyRenderingInServerForm(), la función de éste último es que verifica que un control es generado después de que el formulario del lado del servidor ha empezado ha generarse, pero antes de que éste termine de generarse.

Demostración del Control

El control está escrito en C#, cumple con las especificaciones del CLS, la idea de este control es que pueda ser invocado desde cualquier parte de una aplicación web, solucionando los problemas antes descritos (el tener controles tipo Button, CheckBox, etc).

Para la demostración se creará una Aplicación Web en vb.net, utilizando como herramientas el Visual Studio.Net 2003 y WebMatrix

Creación de una nueva Aplicación Web

Empezando con el diseño de la página, se separan 2 secciones de la página a traves de CSS, en el lado izquierdo se usa CSS para dar el formato al DataGrid, para el lado derecho se usó el "Formato Automático"; se procurará para este ejemplo tener un documento XHTML válido, para lo cuál se borra todo el contenido generado por el Visual Studio.net 2003, el cuál lamentablemente no permite desarrollar documentos XHTML válidos, es por esa razón del uso de WebMatrix para el proyecto, por otro lado el Visual Studio 2005 (Whidbey) si soporta esta característica.

Vista de la página

Se pone el código necesario para acceder a la base de datos y dar la funcionalidad a la paginación del DataGrid

vbnet:

Private Sub CargarDatos(Byval queDataGrid As dgDatos)
        ' Define el DataSet
        Dim ds As DataSet
        ' Si el dataset ya está en el ViewState
        ' entonces recuperarlo de ahí, para no tener que acceder a la base de datos
        ' consecutivamente
        If ViewState("datos") Is Nothing Then
                ds = New DataSet
                Dim da As New SqlDataAdapter("select * from customers", strConexion)
                da.Fill(ds, "Clientes")
                ViewState("datos") = ds
        Else
                ds = CType(ViewState("datos"), DataSet)
        End If
        ' Hace el binding para el DataGrid seleccionado
        Select Case queDatagrid
                Case dgDatos.ConCSS
                        dgConCSS.DataSource = ds
                        dgConCSS.DataBind()
                Case dgDatos.SinCSS
                        dgSinCSS.DataSource = ds
                        dgSinCSS.DataBind()
                Case Else
                        dgConCSS.DataSource = ds
                        dgConCSS.DataBind()
                        dgSinCSS.DataSource = ds
                        dgSinCSS.DataBind()
        End Select
End Sub

Según se puede observar en el código, se asigna a través de código la clase CSS que dá el "formato" a cada parte de dgConCSS, por otro lado se utiliza el método CargarDatos para hacer el DataBinding del DataGrid que hace el PostBack (a través de la paginación).

El control se puede agregar a la barra de herramientas tanto del Visual Studio.Net o del WebMatrix, pudiendo modificar algunas de sus propiedades en tiempo de diseño, también puede crearse dinámicamente a través de código.

Propiedades del Control en tiempo de Diseño

Finalmente se asignan las propiedades necesarias para el funcionamiento del control y se puede ver los resultados en las siguientes figuras:

DataGrid con CSS exportado a ExcelDataGrid sin CSS exportado a Excel

Se puede observar que se pasó sin ningún error los controles de tipo Button y CheckBox respectivamente.

Elementos Utilizados

Autor

Alexander Concha Abarca
Instructor 3ra Estrella - VB.NET

xknown at hotmail.com

168 thoughts on “Exportar un Datagrid a Excel”

  1. Amigo, no sabes que alegria cuando encontre esta pagina, ya que he tenido problemas para exportar a excel con las tildes y eñes?. muchas gracias por tu control.

  2. Hola cuando trato de exportar una grilla con mas de 60000 registros tu componente se cae y no me da los resultados esperados, que será??.

    Saludos

  3. Si ya lo probé, en si no es problema del control sino de la enorme cantidad de datos que se quiere exportar (intenta mostrar los 60000 registros sin paginación, la aplicación consume muchos recursos), voy a aumentar una funcionalidad para exportar sólo la página que se está viendo.
    Saludos

  4. Hola, yo probé tu control con una grilla sin paginación, el problema es que cuando son 60000 o más me pide el nombre de usuario y la contraseña, ya sea con tu control o con una rutina, parecida que exporta a excel.... y no se que pueda ser, me puedes ayudar

  5. Hola, como te dije en el comentario anterior son muchos datos los que quieres exportar y se consume muchos recursos del servidor al realizar dicha operación. Te sugiero que ordenes tus datos según los criterios que creas por conveniente, y de esa manera sólo exportes la información relacionada con éstos, me parece una manera más ordenada de tener dichos datos que agrupados en uno sólo archivo (en la siguiente versión del control como dije habrá la opción de poner un límite de datos a exportar).
    Sobre tu problema en el que te pide usuario y contraseña probablemente sea porque se excede el tiempo de ejecución de dicha consulta u operación (por defecto es 30 segundos).

    Saludos

  6. Saludos....
    Tengo una duda, Como controlo la exportacion de datos, veo que al exportar comienza en la fila 2 y no 1, ¿Como puedo hacer para que exporte y comience desde la fila 1?

  7. Saludos !!
    Tengo un problema estoy elaborando un organigrama con visio y llamando los datos de excel el exportador que tienes esta excelente me ahorro muchos problemas pero.... como puedo hacer para eliminar la primera fila ya sea con el exportador que tienes o por codigo pues eh buscado sin encontrar respuesta. . . . . lo puedo hacer manual pero lo quiero hacer lo mas automatizado que se pueda y la fila me esta dando problemas para ello
    Gracias ....

  8. Angel:
    Espero publicar la nueva versión del control en las siguientes 2 semanas, acabo de solucionar el problema que me comentas y muchos otros también. Te agradezco mucho por el feedback.

    Rossvan:
    No funcionó el control?. Explica que es lo que deseas hacer, sería bueno el foro para eso :)

    Saludos

  9. Hola
    Primero que buen control!!!
    segundo
    tengo un problema al exportar la series de datos en el archivo de excel todas quedan con formato texto entocnes no se dejan manipular.
    Alguien sabe como puedo solucionar eso ?
    Gracias

  10. porfavor necesito ayuda estoy trabajando en web matrix tengo un datagrid pero cuando cargo la consulta a este datagrid los numeros me salen con muchos decimale, como puedo hacer para poder controlar ese formato en un datagrid tambien darle ese estilo de color de filas

  11. Si utilizas columnas personalizadas (BoundColumn, HyperlinkColumn o TemplateColumn) puedes utilizar la propiedad DataFormatString, de la siguiente manera (DataFormatString="{0:0.00}"):

    HTML:
    <asp:DataGrid id="dgDatos" runat="server" Width="50%" EnableViewState="False" OnItemDataBound="dgDatos_ItemDataBound">
        <Columns>
            <asp:BoundColumn DataField="UnitPrice" HeaderText="UnitPrice" DataFormatString="{0:0.00}"></asp:BoundColumn>
        </Columns>
    </asp:DataGrid>

    Si usas columnas autogeneradas, en el evento ItemDataBound tienes que hacer el formateo del número.

    Saludos

  12. En la siguiente dirección podrás encontrar una forma de hacerlo: Mug Perú, en el tercer mensaje podrás ver que utiliza objetos no manejados para exportar un DataSet, no un DataGrid; hay otras formas también, si tengo tiempo te envío un ejemplo...

    Saludos

  13. No funciona correctamente el dataformat string. Tengo una columna:

    Donde la exporta sin formato numérico. Probé exportarla sin dataformatstring y sí lo toma como números pero toma CUALQUIER número (de 2 pasa a 200 x ejemplo)

  14. [asp:BoundColumn DataField="importe" HeaderText="Importe" DataFormatString="{0:0.00}" ItemStyle-HorizontalAlign="Right" /]

  15. Funciona bastante bien... solo una pega, ¿hay alguna manera que guarde los ficheros de excel generados en el servidor sin pedir ningun tipo de confirmación?

    Sería interesante para una aplicación que estoy haciendo. Gracias.

  16. Hola, dos observaciones sobre el componente yo tengo un datagrid con columnas ocultas y a la hora de exportarlo aparecen las cabeceras de las columnas ocultas coloreadas pero sin dato, eso es por que debo poner alguna linea mas de comando?, mi otra observacion es como puedo hacer que se exporte todo en formato texto y no general, lo que sucede es que en mi grid tengo codigos como por ejemplo "654564.240" y cuando es exportado a excel el cero del final es eliminado("654564.24") pues el excel lo considero un numero por eso quiero saber como hacer para exportarlo todo en formato texto.
    Gracias por la atencion

  17. Excelente tu ayuda...

    Quisiera pedirte un favor muy grande

    Espero me puedas ayudar

    Ahora necesito exportar el Grid a Excel pero en win form.

    Att. Maurcio

  18. Miguel: El caso que comentas no fue contemplado al momento de hacer dicho control, para lo del formato, eso debes hacerlo con hojas de estilo, pero que sólo se aplican a excel, aquí tienes un ejemplo.
    Lamentablemente no tengo el tiempo suficiente para continuar con este componente, si deseas te podría enviar el código para que tu mismo hagas las modificaciones y mejoras del caso...

    Mauricio: Cito un mensaje que puse arriba, que te servirá para exportar en aplicaciones Windows:

    En la siguiente dirección podrás encontrar una forma de hacerlo: Mug Perú, en el tercer mensaje podrás ver que utiliza objetos no manejados para exportar un DataSet, no un DataGrid.

    Saludos

  19. Hola Alex, muchas gracias por tu respuesta, ya pues si puedes enviame el codigo a mi email para ver en que puedo contribuir a tu componente.
    saludos
    Miguel

  20. Una ultima consulta la otra vez probe tu componente en el caso que un dataset llena al datagrid pero hice un caso donde el datagrid es caragdo por un datreader y tu componente no funciono, esta diseñado para el caso de dataset solamente?
    o en algo estoy fallando?

  21. Tengo un problema:
    Quiero exportar a excel los datos arrojados en un datagrid, pero mi aplicación es para windows y no para la web.
    Si ustedes pueen ayudarme, se los agradezco de corazón, ya que soy un aficionado a la programación y vivo en un país donde no se sabe mucho de este tema.
    Desde ya, muchas gracias

  22. Exporto los datos a excel, pero tengo problemas con las "eñes" y con las "tildes", tu control me puede servir para solucionar este probelama ???

  23. Amigo, tengo un pequeño problem, cuando funciona localmente oea cuando el servidor es mi PC, pero caudno lo subo al servido donde va a funcionar me aparece esto.
    " Namespace or type 'DgToExcel' for the Imports 'Buayacorp.WebControls.DgToExcel' cannot be found."

  24. los que tengan el problema de la "ñ" si colocan esto esta solucionado al igual que los tildes
    Response.ContentEncoding = System.Text.Encoding.Default
    Saludos

  25. Si me funciono Perfecto como ya tenia yo todos los datos asignados a mi datgrid lo unico que me faltava era como poder exportar a excel todo funciono muy bien de echo solo utilice la la parte del codigo para exportar y me funciono perfecto lo que si tengo duda es que si se puede mandar imprimir directamente sin tener que pedir confiurmacion si desea guardar o no y como puedo añadirle desde codigo datos que no sean de una data grid es decir datos que tengo en texbox para que formen como parte de los encabezados ...

    me parece perfecto tu control y si alguno no les funcione es por que tienen que hacer referencia ala libreria que nue stro buen amigo no hizo el favor de colocar gracias y es pero me puedas ayudar

  26. Somily, no se puede mandar a imprimir directamente, podrías hacerlo usando el método de window.print() y controlando con CSS la presentación del mismo.
    Para lo segundo, por la forma como está programado (shame of me!), no se puede hacer lo que quieres, pero si deseas te puedo enviar el código fuente del componente indicando donde debes modificar...

    Saludos

  27. Hola, muy buen control funciona bien , pero necesito poner texto en la planilla excel, como por ejemplo el título de los datos exportados ¿Se puede?..

    gracias !!!

  28. Somilu me podrias enviar el codigo fuente del componente para modificarlo, la idea es agregar la funcionalidad de exportar mas de una grilla y darle la vista de impresión, desde ya muchas gracias

  29. Alex me podrias enviar el codigo fuente del componente para modificarlo, la idea es agregar la funcionalidad de exportar mas de una grilla y darle la vista de impresión, desde ya muchas gracias

  30. Luis: Como está hecha esta versión, no se puede hacer eso, espero poner el código fuente para la siguiente semana.

    Alejandro: Lo mismo que le dije a Luis.

    Saludos y disculpen por las inconveniencias

  31. Encontre un control parecido, lo modifique y le agregue la funcionalidad de los titulos y subtitulos, alex si estas de acuerdo te lo envio para que lo publiques

  32. Está bien, me indicas tus datos y de donde lo bajaste para hacer la referencia respectiva.

    Saludos

  33. Hola Alex,
    La otra vez me enviaste tu codigo fuente pero parece que es una version anterior al que esta publicado ya que por ejemplo no es dgToExcel.NombreArchivo = "Excel.xls" sino dgToExcel.Nombre = "Excel.xls", ademas al compilarlo y ponerlo en mi aplicacion me pide "Debe asignar el formulario con el que hace PostBack" y esa funcionalidad no esta especificada en tu manual, por favor podrias reenviarme tu codigo fuente es que ya se en donde colocar lo del formato de texto a todo el documento y quisiera comprobarlo en tu componente para contribuir.
    Saludos
    Miguel

  34. Hola. tu control es bueno.
    ¿ se puede saltar el mensaje abrir-guardar-cancelar, y abrirlo inmediatamente el archivo exel?

  35. Hola Alex, muy bueno el control, lo hemos usado en algunas aplicaciones y está funcionando, OK!!
    Mas bien se nos han ocurrido ciertas exquisiteces (al usuario en realidad) como la importar a varias hojas, incluir títulos, importar graficos??? es posible que nos proporciones el código?
    Solo, Si es posible claro, de nuevo Mis felicitaciones y muchas gracias por la ayuda.

  36. Hola,

    Antonio: Puedes mostrar la descripción del error?

    Adrian: El control está un poco desactualizado... estuve intentando mejorar algunas cosas pero lamentablemente no cuento con el tiempo suficiente para terminarlo. Con respecto a tus preguntas, si se puede añadir títulos, pero en cuanto a los gráficos no creo que soporte esa parte.
    Si deseas te envío el código (lo hice cuando estaba empezando e incluye muy malas prácticas de programación)...

    Gracias por los comentarios

    Saludos

  37. Bienvenido el Código Alex!! No importa si hay malas prácticas, aqui le damos vuelta, aplicamos refactoring, patrones, bestia practices (no best es bestia!!) , solo esperemos que funcione igual después de todo eso... :D .
    De donde lo descargo? o me lo envias por correo?
    Gracias.

  38. hola quisiera me puedan proporcionar el codigo para poner titulo en las paginas de excel. de antemano gracias

  39. Por favor, podrias mandarme el código Alex a mi también? Me harías un gran favor por que quiero darle una funcionalidad un poco más amplias.

    Por la calidad del código no te preocupes, eso es lo de menos.

    Un saludo.

  40. Muchas felicidades por este control!!!!! Me ha facilitado mucho la vida, y es muy facil de usar.

    Muchas gracias!!!

  41. Adrian, Densoft y Mirkes, les pido disculpas por no enviarles el código, de verdad lo lamento, lastimosamente no he tenido mucho tiempo últimamente. Estoy pensando hacer una nueva versión para el .NET 2, me gustaría escuchar sus ideas. (Si todavía desean el código me avisan)

    Rodrigo, gracias por los comentarios

    Saludos

  42. Response.Clear();
    Response.Charset = "";
    Response.ContentType = "application/vnd.xls";
    Response.WriteFile("tutabla.html");
    Response.End();

    Saludos
    PS. Disculpa por la demora

  43. Hola!!! He estado probando tu control y funciona excelentemente bien, sin embargo, me gustaria poder poner titulos en las paginas de excel y otros textos, asi que no se si seria mucha molestia que me proporcionaras el codigo para hacerle las modificaciones necesarias.

    De antemano muchas gracias.

    Saludos!!!!

  44. Hola Rodrigo, disculpa por la demora, a qué correo te envío el código?

    Saludos
    PS. Dentro de unas semanas pondré el código en un servidor de control de versiones.

  45. hola alex, estuve viendo tu control y me parece excelente, realmente te felicito por tu control, te queria pedir si es posible que me enviaras el proyecto con la ultima version del control, ya que me gustaria aprender ciertas cosas y agregar nuevas ideas desde ya muchas gracias,

  46. Necesito saber si se puede añadir registro en una datagrid sin que este se encuentre enlazado? y como se la hace en vb .net.
    Muchas gracias.

  47. Hola Luis,

    Hasta donde sé no es posible hacer eso, el DataGrid puede considerarse sólo como un "visor".

    Saludos

  48. Me podrias ayudar estoy programado asp.net pero con c# no con visual, y necesito poder exportar a excel....

    me ayudas.

  49. lo que pasa es que tu codigo esta hecho el vb.net pero estoy tratando de pasarlo a c#.net pero tengo problemitas.....

  50. Resulta que soy novato en C#, quiero construir un método que me permita al momento de hacer clic en una fila de un datagrid, los datos se pasen a los textbox; nombres. apellidos, etc.

  51. Hola,

    Jorge: Cuáles son esos problemitas?

    Fausto: Implementa el evento SelectedIndexChanged del DataGrid y asigna los valores correspondientes a los controles que deseas.

    Saludos

  52. excelente recuerdo, solo que busco un control para usar en vb y exportar un calculo a excel, apartir de un formulario hecho en visual basic, gracias y saludos

  53. Primeramente felicitarte por tu iniciativa, luego queria saber si puedes publicar una versión de este control para windows form y en c#.

    Gracias y sigue adelante

  54. bueno me gustaria saver kuales son los tipos de formato que se aplican en excel la verdad me gustaria saver si saven me gustaria k me enviaran un comentario al mi correo gracias

  55. hola quisiera saber como guardar de un datagrid a un formato establecido en excel por decir q lo q se exporta del datagrid a excel no se vea desde la celda a1 sino q se le pueda asignar una celada especifica en un formato en excel establecido es decir una plantilla gracias por su atencion prestada

  56. Como hago para refrescar los datos de un datagrid en C# .....por fa...alguien puede ayudarme....

  57. Para el caso de aplicaciones web simplemente vuelve a enlazar la fuente de datos a tu DataGrid, en aplicaciones de escritorio no es necesario hacer esto.

    Saludos

  58. nesesito enlasar una pagina de exel con visual basic(mandar datos de visual basic a una hoja de exel)

  59. hey no soy un experto en microsoft visual studio .net para hacer en visual basic la exportacion de lo que tengo en mi base de datos a un datagrid que solo muestre el contenido que tiene la bd y en un dado caso como hacer que desde hacerle un clik a (por ejemplo contiene no-orden, municipio, y clave, suiendo mui llave primarya la clave) que me despiliegue todos los datos que contiene ( en un dado caso que tenga mas casos) mi base de datos la tengo en MySQL y nomas no le encuentro por fa
    te agradezco de ante mano,gracias. desde chiapas

  60. hola, necesito ayuda urgente (claro si c puede jejeje), mi problema es este,tengo una aplicacion para web echa en C#, esta ia funciona la aplicacion, tengo un DataGrid que lleno con una serie de datos importados de una tabla (Folio, ID, nombre, Ver etc), configure el datagrid para que al final tenga links hacia otras paginas, el problema en si es este, quiero que al momento de darle click en la opcion ver (d cada fila), en dos TextBox me guarde el valor de 2 columnas de la misma fila, aun con mi poco conocimiento no e podido y me gustaria que me ayuden, de antemano gracias, su amigo programador Leo, PD si me pudieran responder a mi correo seria mucho mejor antares1986@hotmail.com

  61. holaa soy mary me atrevi a escribir porke tengo un problema necesito hacer un trabajo para fin de año y no se como se trata de enlazar una tabla de ecxel a visual basic porfa ayudenme no se como hacerlo me podrian dar los pasos de como lograrlo

  62. Hola. me parece bien lo de este control. pero no me sale, ya baje el dll y el xml y los enlace a mi proyecto. configuro las propiedades del control. pero sale un error algo del response, que es del usuario o algo asi.
    Quisiera saber que me falta. que hice mal. gracias

  63. Hola necesito exportar los datos de un datagrid el cual tiene columnas ocultas a excel y que en el excel no se vean los datos de las columnas ocultas y como poner titulo y dar formato a los datos del datagrid!! porfis es urgente he iintentado pero me bota todos los datos incluyendo los ocultos. Gracias de antemano si me pueden enviar ejemplos se los agradesco mucho :)

  64. Hola Alex, muy bueno tu control, me solucionó muchos problemas, pero quisiera poder perzonalizarlo un poco más y para ello necesitaria que me puedas mandar (si no es mucha molestia) el código de tu control. Gracias
    lucasschaab@gmail.com

  65. Hola Alex, soy yo otra vez, quisiera ver si me puedes ayudar con una funcionalidad que necesitaria en el control, que es de poder exportar a excel en varias hojas.

    Saludos

  66. Hola Lucas, el control no hace otra tarea más que entregar el HTML generado por el DataGrid, así que el no existe un nivel de personalización como el que deseas (en realidad no se puede hacer mucho). Revisa el enlace de la página 75, trabajando de esa manera tendrás más control sobre el documento que exportas.

    Saludos

  67. Quiero sacar los datos de un datagrid y mostrarlos en cajas de texto, cuando selecciono el indice de un registro detro del datagrid

  68. Hola necesito exportar los datos de un datagrid el cual tiene columnas ocultas a excel y que en el excel no se vean los datos de las columnas ocultas y como poner titulo y dar formato a los datos del datagrid!! porfis es urgente he iintentado pero me bota todos los datos incluyendo los ocultos. Gracias de antemano si me pueden enviar ejemplos se los agradesco mucho
    Por fis es urgente !!! por favor ayudenme!!!

  69. Hola,

    Jorge: Revisa la documentación o http://es.gotdotnet.com/quickstart/aspplus/ para que te des una idea de como hacerlo.

    Karensiux: No sé como estés intentando exportar tus datos, pero si no me equivoco este control no debería exportar las columnas ocultas, si quieres más personalización lee el comentario 88.

    Saludos

  70. HOLA DISCULPE LA MOLESTIA PERO QUISIERA ME AYUDARAS DE COMO PUEDO TRANSPORTAR DATOS DE EXCEL A SQL SERVER; Y HACER LA CONECCION CON VISUAL BASIC .NET
    GRACIAS

  71. Hola, quisiera saber como poder hacer un boton de comando en una planilla y programarlo con visual, o exportar la planilla a visual basic

  72. hola necesito exportar datos de visual basic.net a excell,que al momento me arroje los datos y la grafica

  73. Hola ya pude exportar de un datagrid a excel pero necesito exportar tambien en el mismo excel los criterios de busqueda que seleccione para llenar el datagrid y tener un antecedente de las opciones que me escogi para la consulta. estos criterios pueden ser radiobutton, checkbox y textbox.
    Gracias

  74. Hola Alex ... será que tienes la codificación para C# ... has creado una version en este lenguaje?

  75. Tod lindo....lo unico que quiero saber es como exportar datos a excel desde un recordset por ejemplo en visual basic, o desde una flexGrid.
    Gracias,
    LEo

  76. Hola, me pueden enviar el código fuente del control, lo que pasa es que en la grilla tengo una columna código con valores '000001', '000002', '000003' pero al exportar a excell los valores se cambian por 1, 2, 3, es decir lo convierte en nùmeros y quiero hacer la modificación respectiva.
    Gracias

  77. Hola alex tengo una pregunta no se si se podra o no, pos te digo tengo un datagrid llenado con datos de una consulta en sql server y lo quiero es que ese datagrid llenado se vaya a un reporte de de crystal report y que ese reporte se vea en un winform que tenga el control de crystal report viewer, se podra hacer eso de antemano gracias y tu control esta bueno

  78. Hola Alexander,

    muy práctico el control ya lo estoy usando en una aplicación y super; solo tengo una pregunta.
    Como hago para controlar el ancho de una columna y alto de una fila puesto que a las columnas quedan muy angostas y las filas muy anchas ?

    Muchas gracias por tu aporte.

    Un saludo

    Alexander Acero

  79. Hola Amigo Buen dia.
    Pregunta: ¿Tu aplicacion es comercial o gratuita? Si es gratuita ¿podrias distribuir el codigo fuente?
    Saludos!!

  80. Es gratuita, pero felizmente :D ya no tengo el código fuente de dicho "control". Digo felizmente, porque realmente era código muy feo que simplemente obtenía el HTML resultante del control y enviaba las cabeceras necesarias para hacerlo pasar como un archivo excel.

    Saludos

  81. que tal Alex, muchas gracias por el componente, me ha sido de mucha utilidad, espero colaborar pronto con este foro.....

    Saludos!

  82. Hola Alex,

    El control me funciona bien, pero tengo un problema, aunque ya alguien comento que le sucedio algo similar, resulta que tengo un campo que llega con valores como este 0299359961; con cero(0) al principio, entonces cuando lo pasa a excel lo quita, y sale 29935E+1, es decir no me lo pasa como texto, ya he probado muchas cosas, inclusive una recomendacion que diste, hasta con formatting expressions pero no he podido, tu ya sabes de casualidad como puedo hacer?

    gracias

  83. oye me gustaria saber si ya tienes la nueva version del control porque este no me sirve para exportar muchos registro, truena

  84. No, no tengo, ni pienso tenerlo :-D.

    El funcionamiento del control es simple, sólo recupera el HTML generado por el DataGrid, y eso envía al cliente. Es por eso que el proceso es lento y consume muchos recursos.

    Saludos

  85. Hola, me parece muy bueno pero lo que quiero saber es como exportar un datagridview (vb.NET 2005) a un excel...
    Por que el ejemplo que muestran es de ASP.net y lo que yo quiero es localmente un sistema interno en .net (cliente - servidor), les agradeceria que me ayudaran, gracias de ante mano

  86. Hola;

    El ejercicio es muy bueno pero me gustaria que se construyera con clases para ser programada en csharp, agradezco por la ayuda.
    Gracias

  87. Alonso, para exportar un DataGridView, tu mismo tienes que implementar la funcionalidad para pasar los datos a Excel (dato a dato). Por otro lado, si deseas algo más "profesional", podrías hacer uso de Reporting Services o Crystal Reports.

    Erica, a qué parte te refieres? Existen conversores de código que permiten pasar de vb.net a c#

    Saludos

  88. Hola Gracias por responderme, pero a lo que me refiero es que este programa se pueda utilizar pero solo en c sharp sin utilizar el ASp

    Gracias por la ayuda que me puedas brindar

  89. No, no se puede usar para en aplicaciones de escritorio, como mencioné en el comentario #118, tu misma debes implementar esa funcionalidad, un ejemplo puedes encontrar en el comentario #17.

    Por otro lado, en codeproject.com existe -bastante- código que permite exportar datos de DataSets a formatos de texto plano, excel, etc.

    Saludos

  90. Hola estoy desarrollando un sistema de gestion de para un Departamento de Personal en Visual basic; con un lector biometrico para controlar las entradas y salidas, ya tengo la base de datos en Mysql lo que necesito saber es como almacenar el dato capturado por el dispositivo. Por cierto el dispositivo es un Hamster Nitgen con un sensor de deteccion de presencia de dedos
    Gracias por la ayuda que me puedan brindar...

  91. Miguel, normalmente cada producto brinda APIs o SDKs para interactuar con ese tipo de dispositivos, te sugiero que revises la página del producto al que haces referencia.

    Saludos

  92. Estimado. El control lo he utilizado sin problemas ASP.NET 1.1, ahora tengo que exportar 3 grillas y el problema es que el response.end parece me juega una mala pasada, intente utilizando delegados para llamar pero el exportar me corta "la inspiración"... ¿tienes alguna idea?, estoy medio apurado y no quiero inventar la rueda y ponerme a investigar y hacerlo al viejo estilo ... disculpa si te interrumpo.. se lo que es estar lleno de pegas justamente en esta epoca...

    Feliza Año 2007 para tí y para tod@s

    Slds.
    Rolando

  93. Rolando, en efecto, el control invoca a Response.End luego de exportar los contenidos del DataGrid.

    Me parece que la única alternativa que tienes por este momento, es hacerlo al viejo estilo -el control hace lo mismo. Revisa el enlace del comentario #124

    Saludos y Feliz 2007

  94. Me parecio entupendo pero me guataria que sea en aplicacion para windows con datagridview en C#, puedes ayudarme, toy usando C# . Net 2005

  95. Hola esta muy bueno este foro pero no encuntro lo que busco yo quiero en una aplicacion para windows exportar los datos de un dataset a excel y todas las respuestas que encuentro son para aplicaciones web agradeceria mucho su ayuda mi imeil es dtumaida@hotmail.com

  96. Hola.

    Este código es de muy buena utilidad. Lo he usado en varios datagrid y me ha funcionado perfectamente.
    Pero tengo un datagrid que no sé porque no funciona. El problema está en que cuando ejecuta la función 'Exportar()' del código me sale el siguiente error en la web:

    La colección de controles no puede modificarse porque el control contiene bloques de código (por ej. ).

    Tienes alguna idea de porque me pasa esto?

    Muchas gracias y saludos!

  97. He tenido errores parecidos pero utilizando otras cosas, no puedo recomendarte algo si no sé en qué escenario estás usando el control...

    Revisa el comentario #124 para una explicación del funcionamiento del control.

  98. Hola, Alex, me podrias enviar por favor el proyecto VB, la ultima versión que tienes. Y de que forma podria crear un nuevo archivo cuando he llegado al tope de los registros que Excel permite, pues estoy trabajando con una tabla bastante grande que me sobrepasa el limite, pero quiero que la opción sea crear varios archivos de excel a medida que vaya llenando cada uno de ellos.
    Agradezco tu ayuda

  99. Gracias Alex, solo que yo estoy trabajando con VB.NET , no se si tienes un ejemplo que no sea con c#

    Muchas Gracias

  100. Debe asignar el objeto Response que se devuelve al usuario, a través de la propiedad Response

    me aparece este error me podrias explicar como funciona el control ya que soy primerizo
    saludos edarreola@gmail.com

  101. Fue un error de novato que también cometí al hacer eso :D

    Lo que tienes que hacer es asignar a la propiedad Response de la clase DgToExcel (creo que se llama así) el valor de Page.Response o HttpCurrent.Current.Response

    Saludos

  102. Hola, excelente tu trabajo. Me podrías facilitar el fuente? necesito hacerle algunos retoques, te lo agradecería mucho

  103. Hola a todos, necesitaria saber como puedo en Vb6 extraer datos de un excel, utilizarlos para ir haciendo updates una tabla de SQL

  104. Estimado Alex :

    Estoy tratando de utilizar el control q expones pero en vez de usar un dataset, estoy intentando utilizar un sqldatareader pero al abrir el excel, aparece vacio. el sqldatareader se llena de datos desde un procedimiento almacenado.

    Gracias

    Daniel Leon

  105. Hola, hay alguna forma de que la aplicacion guarde en una ruta previamente definida por codigo y que no sea el usuario quien diga donde se va a guardar el archivo, lo necesito asi, por que requiero enviarlo como archivo adjunto en un correo, todo manejado por codigo.

    Gracias.

    Veronica

  106. hola necesito de su gran ayuda deseo saber que DLL soportan codifiacion visual basic.net para que interactue con un sensor de huella dactilar.
    Yo adquiri un sensor biométrico BIOPOD.

  107. Hola estoy trabajando en un sensor BIOPOD , mi problema es q no tengo LAS Dll del sensor y no se si tengo q utilizar un SDK o un OCX Si alguien de Uds me lo puede facilitar el SDK, o el OCX Necesito usarlo con un sistema de control de personal aplicado en VB.NET con base de datos SQL. Gracias por su ayuda...

  108. tengo el Biopod de apc como sensor, efectivamente trae un sistema de instalación pero no encuentro los ocx, y mucho menos hemos logrado enlazar el sensor con el software el cual está desarrollado en vb y en sql.
    espero alguna respuesta..........gracias.

  109. hola Hepl S.o.S. que tal quisiera que me ayuden ,he estado intentando de una u otra manera ,veras dibuje en un formulario el modela de una boleta de venta pues el problema aqui es que quiero que los datos que tengo en el formulario se pueda imprimir atraves de un crystal report, printdocument , los ques ea pero que se imprima si tienes un jemplo similar mandamelo a mi correo jsandoval_g@hotmail.com
    les estare muy agradecido

  110. hola amigo 2 cosas no se si me solucionaran este problema que tengo en vb.net2003

    1:como crear un codigo que modifique el ancho de la columna en un datagrid

    2:como puedo hcaer que un formulario sea una estrella o un circulo y un popup

    3:que salga una ventana como el msn cuando otro usuario te manda un mensaje....
    espero respuesta pronto .....gracias

  111. Hola quisiera saber como le hago para que este control funcione con un gridview que tiene la propiedad de paginacion en true
    si dicha propiedad la pongo en false funciona correctamente pero el requerimiento es que el grid este paginado.
    ah otra pregunta puedo exportar a excel un datagrid y al mismo tiempo graficar esos datos en excel?

    gracias y Saludos!!

  112. Bueno muy bueno.
    pero como hago lo mismo si es desde un window form.
    como hago para pasar el formato del datagrid a excel. porque los datos si pasan pero el fondo, el color de las columnas o el coloor del texto eso no. como lo haria.

  113. Hola, tengo un problemita que antes no me habia ocurrido al utilizar el objeto y es que al momento de hacer dgToExcel.Exportar() esta perdiendo la ubicación del archivo y el excel envia el error. Si le agreso el path, lo abre, pero me cambia el nombre por el de la página que lo invoco. Si no le agrego el path, no lo abre y envia error, ya que se fue al area de temporales.

  114. Por favor Alex o alguna persona que me pueda orientar... COMO puedo exportar a Excel o PDF mas de 30000 registros sin que me salga un error de Tipo SystemOutmemory

  115. Gracias! me sirvio de mucho la implementación de la hoja de estilo. Ahora estoy batallando con el formato de las columnas. Un dato como "08015644646546" lo exporta a excel como 8015644646546, se que se ha de poder.

    Saludos!!!!!!!

  116. TENGO PROBLEMAS CON EL PROGRAMA EXCEL 2003 ESCRIBO 25 Y CUANDO DOY ENTER SALE 18 Y CUANDO ESCRIBO 18 ME SALE 25 QUE FUE LO QUE PASO

  117. en un datagrid quiero dejar una columna para buscar y consultar una tabla de producto, tengo la consulta como la engancho a la columna del datagrid, si alquien pueda ayudarme, desde ya muchas gracias. ss_ulloaj@yahoo.es

  118. Hola a todos alguien podria ayudarme, estoy exportando a un libro de excel pero necesito que el primer resultado que me genera un SP caiga en la primer Hoja, el siguiente resultado en la hoja2...
    Alguien sabe como??? :S Esto es lo que estoy haciendo la primera vez si se ejecuta pero en la segunda se queda bloqueado.

    Dim Excel As Object
    Dim Libro As Object
    Dim Hoja1 As Object
    Dim Hoja2 As Object
    Dim Hoja3 As Object

    Excel = CreateObject("Excel.Application")
    Libro = Excel.Workbooks.Add

    For i = 1 To 3

    clssG.Concilia = i
    GeneraRep()

    Next

    Sub GeneraRep() 'Genera por cada reporte una Hoja

    Dim col As Integer
    Dim row As Integer

    clssV.sql = "dbo.spCC_CONC_GeneraReportes"
    clssV.DsGrid = clssG.GeneraDataSetSP(clssV.sql, 4)

    Select Case clssG.Concilia

    Case 1
    Hoja1 = Libro.Worksheets(1)

    Dim i As Integer = 1
    For col = 0 To clssV.DsGrid.Tables(0).Columns.Count - 1
    Hoja1.cells(1, i).value = clssV.DsGrid.Tables(0).Columns(col).ColumnName
    Hoja1.cells(1, i).EntireRow.Font.Bold = True
    i += 1
    Next

    i = 2

    Dim k As Integer = 1
    For col = 0 To clssV.DsGrid.Tables(0).Columns.Count - 1
    i = 2
    For row = 0 To clssV.DsGrid.Tables(0).Rows.Count - 1
    Hoja1.Cells(i, k).Value = clssV.DsGrid.Tables(0).Rows(row).ItemArray(col)
    i += 1
    Next
    k += 1
    Next
    Case 2

    Hoja2 = Libro.Worksheets(2)

    Dim i As Integer = 1
    For col = 0 To clssV.DsGrid.Tables(0).Columns.Count - 1
    Hoja2.cells(1, i).value = clssV.DsGrid.Tables(0).Columns(col).ColumnName
    Hoja2.cells(1, i).EntireRow.Font.Bold = True
    i += 1
    Next

    i = 2

    Dim k As Integer = 1
    For col = 0 To clssV.DsGrid.Tables(0).Columns.Count - 1
    i = 2
    For row = 0 To clssV.DsGrid.Tables(0).Rows.Count - 1
    Hoja2.Cells(i, k).Value = clssV.DsGrid.Tables(0).Rows(row).ItemArray(col)
    i += 1
    Next
    k += 1
    Next

    Case 3

    Hoja3 = Libro.Worksheets(3)

    Dim i As Integer = 1
    For col = 0 To clssV.DsGrid.Tables(0).Columns.Count - 1
    Hoja3.cells(1, i).value = clssV.DsGrid.Tables(0).Columns(col).ColumnName
    Hoja3.cells(1, i).EntireRow.Font.Bold = True
    i += 1
    Next

    i = 2

    Dim k As Integer = 1
    For col = 0 To clssV.DsGrid.Tables(0).Columns.Count - 1
    i = 2
    For row = 0 To clssV.DsGrid.Tables(0).Rows.Count - 1
    Hoja3.Cells(i, k).Value = clssV.DsGrid.Tables(0).Rows(row).ItemArray(col)
    i += 1
    Next
    k += 1
    Next

    End Select

    If clssG.Concilia = 3 Then
    Libro.SaveAs("C:\ExcelData\File_Exported.xls")
    ' oQryTable = Nothing

    Hoja1 = Nothing
    Hoja2 = Nothing
    Hoja3 = Nothing
    Libro = Nothing
    Excel.Quit()
    End If
    End Sub

  119. Pingback: 6 años después
  120. Me parece excelente el componenete, me gustaria poder tener el codigo fuente del componente, me podrias enviarlo, Mil Gracias

Comments are closed.