Exportar el contenido de un GridView a Excel
Por: alex | 23 Noviembre 2006 | Ver comentarios |
Hace ya bastante tiempo publiqué un pequeño “control” para exportar un Datagrid a Excel, esa vez decidí no publicar el código fuente debido a que éste tenía demasiados errores de programación -recién empezaba con .NET :-D.
Para mi sorpresa, al parecer este control fue utilizado por un gran número de personas y desde ese entonces he recibido varias consultas sobre el funcionamiento del mismo, algunas simples y otras imposibles de hacer por la forma como se hacía la exportación.
Luego de este breve repaso de la historia del mencionado control, quiero mostrar en resumen que hacía exactamente, pero esta vez utilizando ASP.NET 2.0.
El ejemplo más básico para exportar los contenidos de un GridView a Excel -en realidad sólo se envian las cabeceras necesarias para que el contenido que se envía sea reconocido como un archivo con formato Excel.
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.EnableViewState = false;
GridView1.RenderControl(htw);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=data.xls");
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.Default;
Response.Write(sb.ToString());
Response.End();El problema con el anterior código, es que si el GridView contiene elementos que hace postback (HyperLink, LinkButton, Button, etc), el runtime de ASP.NET mandará un lindo error:
Server Error in ‘/GridView’ Application.
Control ‘GridView1′ of type ‘GridView’ must be placed inside a form tag with runat=server.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Control ‘GridView1′ of type ‘GridView’ must be placed inside a form tag with runat=server.
Este error se produce porque este tipo de controles -los que realizan postback- hacen una llamada al método Page.VerifyRenderingInServerForm(), que como se muestra en la descripción del error, se asegura que el control que se le pase a ese método esté dentro de un elemento form con atributo runat=”server”.
Una forma de evitar este error, es crear una página al vuelo, que contenga un elemento Form y que éste a su vez contenga al GridView:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
Page page = new Page();
HtmlForm form = new HtmlForm();
GridView1.EnableViewState = false;
// Deshabilitar la validación de eventos, sólo asp.net 2
page.EnableEventValidation = false;
// Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD.
page.DesignerInitialize();
page.Controls.Add(form);
form.Controls.Add(GridView1);
page.RenderControl(htw);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=data.xls");
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.Default;
Response.Write(sb.ToString());
Response.End();Esta última porción de código es la que está presente en el control, con algunas otras “características” más.
Si alguien desea un ejemplo del código mostrado en este artículo, que lo pida en los comentarios
.


hernan
24 de Noviembre de 2006, 01:39:26 pm
saludos me puedes facilitar el ejemplo
gracias de antemano
alex
24 de Noviembre de 2006, 02:28:23 pm
Ya he subido el proyecto de prueba, contiene una simple página para exportar los contenidos de la base de datos Northwind (adjuntado en el archivo).
Hans
8 de Diciembre de 2006, 12:36:49 pm
saludos maestro me puedes proporcionar el codigo de este ejemplo.
alex
10 de Diciembre de 2006, 02:37:17 pm
Hans, el código ya está publicado, puedes encontrarlo al final del artículo
dario
20 de Diciembre de 2006, 03:13:42 pm
esta bueno, pero que pasa si quiero exportar mas de un gridview a un mismo archivo excel?
adjunto tambien el codigo para visual studio (esto va dentro del evento click del boton exportar)
Dim sb As StringBuilder = New StringBuilder()
Dim SW As System.IO.StringWriter = New System.IO.StringWriter(sb)
Dim htw As HtmlTextWriter = New HtmlTextWriter(SW)
Dim Page As Page = New Page()
Dim form As HtmlForm = New HtmlForm()
GridView.EnableViewState = False
Page.EnableEventValidation = False
Page.DesignerInitialize()
Page.Controls.Add(form)
form.Controls.Add(GridView)
Page.RenderControl(htw)
Response.Clear()
Response.Buffer = True
Response.ContentType = “application/vnd.ms-excel”
Response.AddHeader(”Content-Disposition”, “attachment;filename=data.xls”)
Response.Charset = “UTF-8″
Response.ContentEncoding = Encoding.Default
Response.Write(sb.ToString())
Response.End()
Ritch
26 de Enero de 2007, 01:01:06 pm
Hola que tal, he leido tu articulo y es genial, es bueno encontrarse personas com tu, con ese talento. Felicidades, espero me sirva
alex
26 de Enero de 2007, 04:27:35 pm
Gracias por el comentario.
Sebastian Charrier
30 de Enero de 2007, 07:44:00 am
MUCHAAAAAAAAAsss.. gracias estoy en la pega y hera necesario que terminara un programilla hoy al cual solo le hacia falta exportar…
y justamente hoy necesito salir temprano, por lo tanto te lo agradezco un millon.. MASTER
Hernan
1 de Febrero de 2007, 09:47:54 am
Saludos.
favor si me puedes ayudar con el ejemplo gracias.
Hernan R
Arturo Negron
9 de Febrero de 2007, 03:04:53 pm
Hola ,
el codigo esta exelente , funciona muy bien , pero tengo un problema cuando edito las plantillas del gridview , para ser mas exacto cuando personalizo las columnas reemplazando el LABEL por el TEXTBOX entonces este campo ya no se transfiere al excel.
ya se que es extraño usar textbox para presentar datos en el grid paro es que no puedo hacer el la etiqueta label conserve el tamaño original del campo.
saludos,
Arturo
Raúl
15 de Febrero de 2007, 04:45:11 pm
GRACIAS!!!
me funciono de maravilla tu codigo…
excelentes aportes
siorven de mucho, sobre todo a los que nos iniciamos recien…
saludos!
LuisFelipe
20 de Febrero de 2007, 11:35:21 am
Me funciono de maravilla para un proyecto de la univ muchas gracias
Javi
27 de Febrero de 2007, 07:08:54 am
Felicidades por tu espacio web, deberas que lo visito a menudo.
He probado tu código de forma satisfactoria en varias páginas, pero ahora me encuentro con un problema, que aunque supongo tiene fácil solución, no logro dar con el.
El problema es que mi datagrid está paginado, y al exportarlo me interesa que se muestren todos los registros sin paginar.
He probado a poner “nombreGrid.AllowPaging = False” despues de la linea “nombreGid.EnableViewState = False” pero no se solucionó nada.
Cualquier idea será bienvenida.
Gracias de antemano
alex
27 de Febrero de 2007, 07:13:52 am
Para que logre exportar todos los datos necesitas asignar la fuente de datos nuevamente.
Saludos
Sebastian
7 de Marzo de 2007, 04:09:32 pm
Muchas gracias por el codigo, funciona muy bien aunque cuando tengo columnas con imagen para editar o eliminar una fila, al abrir el archivo generado en excel sale un recuadro gris que no me deja ver bien la tabla.
Alguna idea de porque sucede esto?
alex
7 de Marzo de 2007, 10:09:54 pm
Ni idea, pero creo que sería mejor si quitas esas columnas.
Saludos
oscar
9 de Marzo de 2007, 11:25:08 am
Me suma a los agradecimientos. Muchas gracias por el código me funcionó de maravillas
Jose A. Pinilla
20 de Marzo de 2007, 11:54:10 am
Buenos Dias.Quisiera saber si es posible mediante un codigo, enviar unos resultados de un programa que he echo en c sharp, a excel, para que excel me haga unos calculos que no puedo hacer en c hsrap como lo son la distribucion T. Invertida, Distribucion F de Fisher, emntre otras, y al final volver a tomarlos en C Sharp. Si me ayuda se lo agradeceria muchisimo, llevo bastante tiempo investigando y no he encontrado nada. la verdad es que soy nuevo en C sharp pero me parece muy bueno.
alex
21 de Marzo de 2007, 07:10:56 am
Hola Jose, nunca he intentado hacer algo parecido a lo que pides, pero si fuera tu intentaría buscar las implementaciones en c# de las funciones que mencionas.
Saludos
ksolanoo
22 de Marzo de 2007, 02:02:17 pm
Tu codigo me funciono, pero tengo el problema que necesito exportar mas de 200,000 registros, y teniendo el gridview al excel solo me pasa los 65,000 y tantos maximo que tiene, me podes ayudar con eso??? Necesito crear tantos exceles como datos quepan.. Te lo agradeceria muchisimo
alex
23 de Marzo de 2007, 02:08:42 pm
ksolanoo, debes paginar tus datos en porciones razonables, puesto que no sé que utilidad tenga poner tantos datos juntos en archivos Excel.
Saludos
ksolanoo
25 de Marzo de 2007, 08:06:05 pm
Pero no se como hacerlo.. sabes teniendo el dataset, lo cargue todo en un datatable y he ido leyendo cada data…. pero no se como particionar el datatable… osea para que se me hagan tantos archivo como daatos hayan
porfaaaa ayudame
Gustavo
26 de Marzo de 2007, 07:02:34 am
hola queria saber como importar un datagrid a excel no hacer una copia exacta porque quiero copiar ciertas celdas
Muchas gracias
odin
26 de Marzo de 2007, 05:29:51 pm
Hola!
Éste método es muy bueno, a mi me funciona perfectamente cuando exporto solo texto, pero si quiero exportar algun elemento de html me falla, tan solo parece que se recarga la pagina en blanco (con la informacion inicial, como si se “re-seteara”) el problema sólo aparece cuando exporto mucha informacion (unos 10 000 registros) y entre ésta hay tags HTML, alguien tiene alguna idea?
alex
26 de Marzo de 2007, 10:14:34 pm
ksolanoo, haz la paginación a nivel de base de datos, no me parece muy adecuado tener todos los datos en memoria a la vez. El código para hacer esta tarea dependerá del DBMS que estés usando.
Gustavo, no sé que nivel de personalización desees como para sugerirte algo concreto.
Odin, no hice la prueba con textos que contienen etiquetas HTML. ¿Se reproduce ese mismo comportamiento cuando exportas pocos datos?
Saludos
Karina
4 de Mayo de 2007, 03:03:23 pm
Hola , encontre lo que estaba buscando baje el ejemplo que pusiste y si corre perfecto, pero al quererlo implementar en mi aplicacion web se genera este error:
Sys.Webforms.PageRequestManagerParserErrorException, The message receive from the server could not be parsed. Common causes for this error are when the response is modified bye call to response.write(),response filters
Details: Error Parsing near ‘
ing_marco
16 de Mayo de 2007, 09:33:45 am
Hola, tengo el siguiente problema. trato de exportar a EXCEL una tabla HTML inicialmente tiene un valores: como nombres titulos y valores por defecto para que puedan ser accedidos desde el net les puse que corran del lado del servidor y cuando trato de exportarlos me exportarlos los datos iniciales, como si el postback borrara los datos.
Espero me entiendan y puedan ayudarme.
Santiago
28 de Mayo de 2007, 04:52:01 pm
Buen dia, primero quiero felicitarte por el codigo que publicaste, y segundo pedirte una ayuda, me sale el siguiente error:
The Controls collection cannot be modified because the control contains code blocks (i.e. )
y no se como exportar el gridview. El archivo .aspx si tiene las etiquetas pero no el cuerpo del gridview.
Gracias
alex
28 de Mayo de 2007, 06:44:29 pm
Santiago, imagino que te manda ese error porque algún control está modificando en tiempo de ejecución la estructura de la página (como título, agregar elementos meta al documento html, etc).
Alexander
4 de Junio de 2007, 06:09:32 pm
muy buen articulo felicidades, solo una duda mi gridview tiene un boundfield el cual uso para seleccionar alguna fila de mi gridview pero cuando quiero pasar la informacion a excel me marca error, hay alguna forma de corregir esto? el error lo marca en la linea frm.RenderControl(hw) y dice asi: Sólo se puede llamar a RegisterForEventValidation durante Render();
gracias y saludos
diego
5 de Junio de 2007, 11:03:07 am
Hola, yo usé lo que dijiste para arreglar una funcion que obtenía el HTML de un control al sobreescribir la función “VerifyRenderingInServerForm” en la página.
Tengo un problema, cuando rendereo un datagrid, no toma los “ItemCreated” ni los “ItemDataBound”…. alguien sabe que se puede hacer???? muchas gracias
alex
5 de Junio de 2007, 12:48:24 pm
Alexander y diego: actualmente estoy un poco ajustado de tiempo como para darle una revisión al código.
Una alternativa que les sugiero que vean es hacer uso de
Server.Executepara lograr resultados similares.diego
5 de Junio de 2007, 02:50:05 pm
Alexander: con esta línea arreglarías tu problema (obviamente antes de renderear):
page.EnableEventValidation = false;
Alex: Lamentablemente server.execute no me sirve en este caso =(
sigo buscando, pero ya mire toda la red, castellano e inglés y no encontré nada que me pueda ayudar…. lamentablemente creo que voy a tener que volver al framework 1.1 donde esto funcionaba… (de hecho la idea es migrar una aplicación que funciona perfectamente del framework viejo al nuevo)
alex
5 de Junio de 2007, 03:49:56 pm
@diego: acabo de probar un ejemplo simple y no veo ningún problema -al menos con el evento ItemDataBound.
Alexander
5 de Junio de 2007, 05:18:00 pm
muchas gracias ya funciona mi ejemplo y ya no tengo ningun problema como el que comentas diego, saludos
diego
6 de Junio de 2007, 10:35:25 am
te agradecería si me pasas tu ejemplo alex, si me funciona voy a poder ver qué diferencia tenemos en los códigos, no importa cuánto tiempo me lleve =)
el problema es que estoy trabado con esto y no puedo seguir
realmente si me pasás por mail ese ejemplo te voy a agradecer muchísimo
PD: de nada alexander =)
alex alexander, que confuso jajaja
diego
6 de Junio de 2007, 02:45:47 pm
alex, ya lo pude arreglar!!!! el problema estaba en otro lado: yo guardaba el datagrid en un session y despues lo agarraba de neuvo, cuando lo agarraba (solo pasa esto en el framework 2.0, en el 1.1 no) pierde los itemdatabound e itemcreated, se los seteo de nuevo y listo, la aplicacion funciona 10 puntos =) =) =) =)
muchas muchas gracias por todo!
alex
6 de Junio de 2007, 03:58:32 pm
Bien por ti diego, aunque me parece un poco extraño guardar un Datagrid en la sesión
diego
8 de Junio de 2007, 09:29:50 am
es muy util ^^
haces un datagrid bonito con [asp:datagrid bleh bleh] en un aspx, despues lo guardas en el session vacío y lo podes usar para bindear y devolver el html dentro de un ajax
magnifique (para datagrids chicos)
Rosaura Garcia
12 de Junio de 2007, 11:26:16 am
Hola! Tengo dentro de un user control un gridview que quiero mandar por mail, he utilizado los ejemplos anteriores para volver el grid html ahora no sé cómo llamarlo desde la página aspx.cs para mandarlo por mail este es mi código
protected string GetControlAsHtml(Control ctrl) { StringWriter sw = new StringWriter(); HtmlTextWriter htm = new HtmlTextWriter(sw); ctrl.RenderControl(htm); return sw.ToString(); } public string GridUsers(Control ctrl) { return GetControlAsHtml(GridView1); }me puedes ayudar a hacer una función publica que me devuelva el control a la pagina
Gracias
Pablo
14 de Junio de 2007, 10:21:59 am
Hola, soy nuevo en esto de la programacion web asi que estoy dando mis primeros pasos. Probe el codigo y en mi aplicacion web se genera este error:
Sys.Webforms.PageRequestManagerParserErrorException, The message receive from the server could not be parsed. Common causes for this error are when the response is modified bye call to response.write(),response filters
Details: Error Parsing near ‘
que puede ser?
Gracias
Pablo
Mauricio Medina
25 de Junio de 2007, 11:42:48 am
Se agradece el proyecto, funciona sin problemas.
Gracias.
Hugo
6 de Julio de 2007, 12:33:43 pm
Saludos…
Probé el ejemplo y lamentablemente no funciona cuando tienes todo dentro de un UpdatePanel, estoy usando Ajax y obviamente va en contra del Response.Write jeje…
Alguna solucion??
Gracias.
Alberto
19 de Julio de 2007, 03:11:25 am
Hola,
Me funciona perfectamente el código para exportar un gridview a Exel.
El problema lo tengo con el formato (colores, ancho de columna…), cómo puedo hacer para que se exporte el gridview exactamente igual al que se ven en el explorer?
Pablo
27 de Julio de 2007, 12:12:32 pm
Para Diego….me pasarias el codigo para guardar un datagrid en una session??? como lo recupero despues????
Mil Gracias
Pablo
27 de Julio de 2007, 02:12:20 pm
Perdon…obviamente tengo ajax adentro…no hay problema de pasarlo????
Mik@my
9 de Agosto de 2007, 10:44:37 am
El Código de exportar los datos de asp a Excel …. me funicono de maravilla graciassssssss
que la pasen bien
Nata
20 de Agosto de 2007, 04:03:41 pm
Hola…me podrias enviar el codigo, en verdad me ayudaria mucho con unproyecto que estoy desarrollando actualmente…
Michel
21 de Agosto de 2007, 06:37:01 pm
Fuera de este tema, tienes alguna idea de como hacer que el gridview funcione con MySQL como funciona con SQL Server de Microsoft? En especial me interesa la parte de editar, ya logre hacer desplegar la informacion en forma ligada a la base de datos (con algunos problemas como “ñ”’s o acentos) pero no logro haver la parte del edit (update y delete.
Te agradecería tu asesoria. Gracias de antemano.
alex
21 de Agosto de 2007, 08:04:51 pm
Michel, para el problema de las ñ y tildes, sólo tienes que especificar la codificación adecuada en el Web.config.
Por otro lado, para la parte de edición del DataGrid no importa si usas SQL Server o MySQL, supongo que debe haber un error por ahí.
Gabriel
24 de Agosto de 2007, 06:18:40 pm
Hola, muy bueno tu codigo, funciona igual que en asp (no .NET), mi problema es como puedo generar un archivo de Excel en el cliente pasandole los datos del DataGrid??
Saludos!!
Rafael
5 de Septiembre de 2007, 04:36:31 pm
Hola a todos!, primero les informo que ya tengo la funcionalidad para exportar a excel un gridview ahora lo que necesitro hacer es exportar el mismo grid pero no todos los registros si no los que se han filtrado por medio de un dropdownlist es decir ahi eligo una categoria se refresca el gridview con los datos correspondientes a esa categoria y esos son los que deseo exportar a excel.?
gracias y saludos a todos
Fanny
6 de Septiembre de 2007, 03:23:03 am
Hola! ¿Y para Excel 2007?
¿Me sirve el mismo código?
Rafael
7 de Septiembre de 2007, 06:05:25 pm
gracias pero ya lo hace automatico !!
Francisco Javier
7 de Septiembre de 2007, 06:37:08 pm
Saludos, Ayuda
Tengo un Query(Oracle) que algunos de sus field son varchar2, parte de su contenido es ‘0204′, o sea algunos tiene el ‘0′ cero delante. Cuando es llevado a Excel el o los ‘0′ zeros que tiene delante son quitados y aparace ‘406′. ¿Cómo puedo hacer para que los cero permanescan y no sean quitados?
Francisco Castro
7 de Septiembre de 2007, 06:41:36 pm
Saludos, Ayuda
Tengo un Query(Oracle) que algunos de sus field son varchar2, parte de su contenido es ‘0204′, o sea algunos tiene el ‘0′ cero delante. Cuando es llevado a Excel el o los ‘0′ zeros que tiene delante son quitados y aparace ‘406′. ¿Cómo puedo hacer para que los cero permanescan y no sean quitados?
Gracias
Ayk
10 de Septiembre de 2007, 07:16:32 pm
Tienes que poner lo siguientes antes de hacer el response.Write
string sStyle = @” .CssText { mso-number-format:\@; } “;
response.Write(psStyle);
Con esto respetara los ceros de la izquierda
Marcuan
14 de Septiembre de 2007, 01:15:31 pm
Hola a tods.. me podrias ayudar por favor..necesito exportar a excel no solo el contenido del grid sino una imagen .jpg…gracias de antemano…
Rafael
14 de Septiembre de 2007, 06:46:19 pm
hola otra vez eh regresado a terminar mi gris de datos que estoy desarrollando, ahora la pregunta es:
como hago para activar o desactivar por medio de codigo la paginacion de un gridview, ya sea con un checkbox o con un boton de asp?
y la ultima como recupero el indice de la columna por la cual esta ordenado el grid? ovio para esto en tiempo de ejecucion el usuario lo puede modificar y le quiero marcar o seleccionar la columna por la cual hace el ordenamiento?
gracias y saludos a todos?
xcheles
1 de Octubre de 2007, 05:57:45 pm
Hola que tal:
Ya tengo mi datagrid y en el evento click de un boton puso el codifo para exportarlo a excel y me aparece el error de:
Sys.Webforms.PageRequestManagerParserErrorException, The message receive from the server could not be parsed. Common causes for this error are when the response is modified bye call to response.write(),response filters
Details: Error Parsing near ‘<form method=”post” ‘
Efectivamente todo esto esta dentro de un updatepanel ya que corresponde a una seccion independiente d emi proyecto, alguien me puedo ayudar??!!
Gracias!!
Patty
24 de Octubre de 2007, 03:48:36 pm
Hola, he utilizado el control en ocasiones anteriores sin problemas, pero ahora, en una nueva aplicación que estoy desarrollando me arroja el error: Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack. Mis sospechan van por el lado de la versión del excel, que es del office 2007, además he provado diferentes maneras de exportar a excel y todas fallan por lo mismo. No se si existe alguna referencia o antecedente respecto de esto?
EdgarH
26 de Octubre de 2007, 05:24:53 pm
Hola Campeón.
Muchas gracias por la ayuda. Requiero exportar a Excel desde un grid view en una aplicacion windows, por casualidad me puedes ayudar con un ejemplo.
Exitos y eres un gran mentor.
JrWilly
8 de Noviembre de 2007, 11:38:22 am
Hola;
Me puedes facilitar el ejemplo.
Gracias.
Mauricio Duarte
16 de Noviembre de 2007, 10:06:28 am
Gracias me fue de mucha ayuda tu ejemplo, en verdad gracias y felicitaciones por esa labor
leslie
28 de Noviembre de 2007, 10:06:52 pm
Hola, por favor ayudenme, tengo una base de datos en excell de 65000 clientes y quiero que llegue a 120,000 pero obvio ya no caben filas, que hago x fa , lo tengo que entregar en esta semana.
leslie
28 de Noviembre de 2007, 10:14:58 pm
Hola, por favor ayudenme, tengo una base de datos en excell de 65000 clientes y quiero que llegue a 120,000 pero obvio ya no caben filas, que hago x fa , lo tengo que entregar en esta semana.
quiero evitar clientes duplicados , por fa ayudenme ustedes que son unos expertos y maestros.
Hector
11 de Diciembre de 2007, 05:07:08 pm
The HTML export to Excel in a real web world works only when you have a few records. Moreover you have no output control (numer of decimal digits, numeric fields, etc)
If you need real controlled exports you must obtain iether a real XML format export to Excel 2003 or xlsx format export to Excel 2007. Look at http://www.gridviewtoexcel.com
Maria
18 de Diciembre de 2007, 10:08:51 am
Hola!!!! necesito exportar varios datagrids en el mismo excel uno debajo del otro o sino en diferentes hojas, cualquiera de las dos formas, quisiera saber si existe alguna forma de hacerlo usando este control. Muchas Gracias!!
master
22 de Enero de 2008, 11:19:14 am
me puede ayudar bastante si me facilitas el ejemplo,
gracias de antemano,
master
22 de Enero de 2008, 11:21:42 am
necesito exportar solo un dataview a exel ayuda porfa, respuestas al syncmaster7771@hotmail.com
seba
20 de Febrero de 2008, 10:57:33 am
hola soy nuevo en esto. y el codigo es bueno;
me gustaria si pueden mandar mas informacion sobre el tema u otros.
gracias
Mónica
27 de Febrero de 2008, 09:04:16 am
Cuando ejecuto el código todo parece estar bien ya que me pregunta que quiero hacer con el archivo excel, pero ya sea que le de guardar o abrir, nada sucede. ¿Qué puede estar sucediendo? Mi codigo es este:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
Page page = new Page();
HtmlForm form = new HtmlForm();
gvConsulta.AllowPaging = false;
gvConsulta.EnableViewState = false;
gvConsulta.DataSource = Session[”gvConsulta”];
gvConsulta.DataBind();
// Deshabilitar la validación de eventos, sólo asp.net 2
page.EnableEventValidation = false;
// Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD.
page.DesignerInitialize();
page.Controls.Add(form);
form.Controls.Add(gvUdaisAsoc);
page.RenderControl(htw);
Response.Clear();
Response.Buffer = true;
Response.ContentType = “application/vnd.ms-excel”;
Response.AddHeader(”Content-Disposition”, “attachment;filename=Consulta.xls”);
Response.Charset = “UTF-8″;
Response.ContentEncoding = Encoding.Default;
Response.Write(sb.ToString());
Response.End();
( En la sesion tengo guardada la List con que alimento el gridview)
esperanza
27 de Febrero de 2008, 09:45:11 am
Me podrias enviar el codigo por favor? me sale un error de “Sólo se puede llamar a RegisterForEventValidation durante Render();”
Gracias
NecroKorn
3 de Marzo de 2008, 08:16:27 pm
estimados, muy buenos aportes, espero que esto sirva
el codino inicial o comun para exportar a excel es (vb.net):
Response.ContentType = “application/vnd.ms-excel”
Response.AddHeader(”Content-Disposition”, “attachment;filename=AnyName.xls;”)
Response.Charset = String.Empty
Me.EnableViewState = False
Dim oStringWriter As New System.IO.StringWriter
Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter)
grvDatos.RenderControl(oHtmlTextWriter)
Response.Write(oStringWriter.ToString)
Response.End()
este codigo arroja un error cuando se usa ocn la master page, pero con esta declaracion se soluciona
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
End Sub
madval
25 de Marzo de 2008, 12:41:27 pm
Para quienes tengan problemas con las eñes y con los tildes, pueden cambiar la codificación con:
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Charset = “”;
NecroKorn
27 de Marzo de 2008, 09:53:52 am
estimados saludos, probando el codigo, funciona casi todo bien, excepto, con el tema de decimales, por ejemplo el numero 145,9700 se transforma en 1.459.700, esto psa al momento de la conversion a excel, espero que alguien me pueda ayudar, gracias
oXar
2 de Abril de 2008, 03:22:37 pm
Estoy haciendo un reporte desde visual y asp .net … el reporte ya esta bien … lo unico que necesito es saber como mandarle la imagen de la empresa al Reporte de Excel … espero q alguien me pueda ayudar … gracias
tavolopez
10 de Abril de 2008, 07:30:06 pm
Muchas Gracias!
nsperez
14 de Abril de 2008, 09:33:49 am
Slds a todos los que colaboraron con la exportacion de Datagrid a Excel ya que intente diferentes formas de hacerlo y solo gracias a sus aportaciones encontre la solucion para hacerlo, pero tengo un inconveniente en el datagrid tengo casi 4000 registros y el grid tiene AllowPaging para no mostrar todos los datos en el WebForm al exportar los datos solo me exportar las primeras 10 filas de la paginacion, es necesario el pagineo ya que el reporte de datos tiene varios filtros, espero me pueda ayudar alguien para exportarlos todos.
lasanz
18 de Abril de 2008, 03:05:13 am
Hola estoy desarrollando una aplicacion web con asp net 2.0 y la programacion en visual Basic. Mediante el codigo descrito anteriormente consigo exportar un gridview a excel, pero el problema es que no tengo que exportar un gridview lo que tengo que hacer es que el cliente al pulsar un boton le genere un excel pero con un determinado formato y rellenar datos que leo de una base de datos.
Gracias
edgar
30 de Abril de 2008, 10:54:56 am
como hago para exportar un reporte a pdf, sin usar crystal report ya que en el ejemplo anterior si le cambamos la extencion de data.xls a data.pdf este genera un error gracias
Hernan Olivieri
3 de Junio de 2008, 01:01:07 pm
Algo mas simple de hacer… Si se quiere exportar a Excel 2003 o superior, como estos soportan XML, se puede hacer lo siguiente siempre y cuando el datasource de la Grilla sea un Dataset.
Grilla.Datasource=miDs;
Grilla.DataBind();
// Funcion exportar
miDs.WriteXML(”C:\data.xls”);
eso generaria un archivo de excel con los datos. La condicion es que al hacerlo desde ASP.NET, tendriamos que escribir en otro directorio, ya que no podemos guardarlo en la PC del usuario.
Saludos, espero les haya servido
Edgar Urrutia
26 de Junio de 2008, 12:45:37 pm
Buena tarde … puedes facilitarme el codigo para exportar un gridview a excel… en aso.net
Gracias
Oscar
16 de Julio de 2008, 06:16:39 am
Hola!
Pues… a mi no me funciona!
Se queda de “StringBuilder”…
Esto funciona en ASP programado en VB?
Gracias!
Max Trebor
17 de Julio de 2008, 11:35:18 am
xcheles, yo tenía el mismo error:
Sys.Webforms.PageRequestManagerParserErrorException, The message receive from the server could not be parsed. Common causes for this error are when the response is modified bye call to response.write(),response filters
Details: Error Parsing near ‘<form method=”post” ‘
Se soluciona quitanto el UpdatePanel
o aislando el botón de export a XLS fuera del UP.
Saludos
lorelay
18 de Julio de 2008, 04:07:44 am
Hola,
Necesito saber si también es posible exportar a Excel desde una aplicación Windows Forms.
Agradeceré mucho la respuesta, este tema me tiene en ascuas.
Saludos.
Diego Rojas
21 de Julio de 2008, 10:22:39 pm
Hola yo lo estoy haciendo en Visual Studio 2008 - Visual Basic
Antes que nada gracias por publicar este código.
Me muestra el archivo “data.xls” pero esta vacio. sin datos (mis dato son muy simples dos campos string)
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sb As StringBuilder, sw As StringWriter, htw As HtmlTextWriter, form As HtmlForm
sb = New StringBuilder
sw = New StringWriter
htw = New HtmlTextWriter(sw)
Page = New Page
Form = New HtmlForm
GridView1.EnableViewState = False
‘ GridView1.AllowPaging = False
‘ GridView1.DataBind()
‘Deshabilitar la validación de eventos, sólo asp.net 2
Page.EnableEventValidation = False
‘Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD.
Page.DesignerInitialize()
Page.Controls.Add(form)
form.Controls.Add(GridView1)
Page.RenderControl(htw)
Response.Clear()
Response.Buffer = True
‘Response.ContentType = “application/vnd.ms-excel”
Response.ContentType = “text/plain”
Response.AddHeader(”Content-Disposition”, “attachment;filename=data.xls”)
Response.Charset = “UTF-8″
Response.ContentEncoding = Encoding.Default
Response.Write(sb.ToString())
Response.End()
End Sub
Quien me podria ayudar, gracias
Diego Rojas - dierojas@hotmail.com
Diego Rojas
21 de Julio de 2008, 11:27:50 pm
Muchas Gracias ya funciono.
Saludos
Diego Rojas
Dim sb As StringBuilder = New StringBuilder()
Dim sw As StringWriter = New StringWriter(sb)
Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
Dim pagina As Page = New Page
Dim form = New HtmlForm
GridView1.EnableViewState = False
pagina.EnableEventValidation = False
pagina.DesignerInitialize()
pagina.Controls.Add(form)
form.Controls.Add(GridView1)
pagina.RenderControl(htw)
Response.Clear()
Response.Buffer = True
Response.ContentType = “application/vnd.ms-excel”
Response.AddHeader(”Content-Disposition”, “attachment;filename=data.xls”)
Response.Charset = “UTF-8″
Response.ContentEncoding = Encoding.Default
Response.Write(sb.ToString())
Response.End()
Oscar
28 de Julio de 2008, 08:12:04 am
Hola…. esto no va en asp….
Me da este error:
Error de compilación
Descripción: Error durante la compilación de un recurso requerido para dar servicio a esta solicitud. Revise los detalles de error específicos siguientes y modifique el código fuente en consecuencia.
Mensaje de error del compilador: BC30002: El tipo ‘StringWriter’ no está definido.
Error de código fuente:
Línea 669: Sub Button6_Click(sender As Object, e As EventArgs)
Línea 670: Dim sb As StringBuilder = New StringBuilder()
Línea 671: Dim sw As StringWriter = New StringWriter(sb)
Línea 672: Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
Línea 673: Dim pagina As Page = New Page
Alguien puede ayudarme?
Muchas gracias!
Jorge Cardenas
15 de Agosto de 2008, 01:29:50 pm
buena tarde:
Tengo un problema y agradeceria sus opiniones.
Al usar MiDataSet.WriteXml(”ruta a guardar”) para exportar mi Dataset a Excel pierdo los ceros de la izquierda de algunos campos.
Como se podria solucionar eso?
Gracias…
Jorcar…
tavo
19 de Agosto de 2008, 10:42:35 am
puchas pelonas se venden pitos con mecos puto el que lo lea
tavo
19 de Agosto de 2008, 10:44:26 am
chico fusca chica ardiente qu coja amage y chupe los mecos
koen
24 de Agosto de 2008, 11:40:17 pm
Saludos , pot favor orientame que es mas recomendable usar si la libreria de ajax o utilizarla interface icallbackevenhandler