none
Exportar Dataset o Datatable a Excel RRS feed

  • Pregunta

  • Hola amigos como puedo exportar un dataset o datatable a excel, lo pregunto por que tengo un gridview que lo tengo enlazado a un dataset y lo quiero exportar a excel completo. Gracias por sus respuestas.
    jueves, 9 de diciembre de 2010 16:16

Respuestas

  • Hola amigos despues de tanto buscar y preguntar por internet encontre la solucion y se las coloco para que a alguien mas le sirva. como consejo nunca copien y peguen codigo sin antes saber que es lo que estan copiando, yo lo aprendi en la practica. Muchas gracias por todo el apoyo.

    protected void btnExportar_Click(object sender, EventArgs e)
        {
            //para exportar sin un aspxgridview exporter
            //se debe inicializar varias clases
            try
            {
                StringBuilder sb = new StringBuilder();
                StringWriter sw = new StringWriter(sb);
                HtmlTextWriter htw = new HtmlTextWriter(sw);
                Page page = new Page();
                HtmlForm form = new HtmlForm();

                //Como el gridview esta pagina se debe quitar
                //o deshabilitar para poder exportar correctamente
                GridView1.AllowPaging = false;
                GridView1.DataBind();
                GridView1.EnableViewState = false;
                page.EnableEventValidation = false;

                page.DesignerInitialize();
                page.Controls.Add(form);
                form.Controls.Add(GridView1);

                page.RenderControl(htw);

                //le indicamos a la aplicacion que el archivo a exportar será xls
                Response.Clear();
                Response.Buffer = true;
                Response.ContentType = "application/vnd.ms-excel";

                //Le damos el nombre al archivo que queremos que cree
                Response.AddHeader("Content-Disposition", "attachment;filename= InformeDeDatos.xls");
                Response.Charset = "UTF-8";

                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.ContentEncoding = System.Text.Encoding.Default;

                Response.Write(sb.ToString());
                Response.End();

                //y finalmente lo paginamos de nuevo para que quede tal como estaba
                GridView1.AllowPaging = true;
                GridView1.DataBind();
            }
            catch (Exception exp)
            {
                //en c# web lo mensajes en pantalla hay que realizarlos con javascript, en c# windform son por defecto asi           
                string script = @"<script language = ""JavaScript"">alert('Filtre más la informacion por que se sobrepaso de los 65.536 registros del excel');</script>";
                ClientScript.RegisterStartupScript(typeof(Page), "Alerta", script);
                return;
            }
        }
    • Marcado como respuesta Aprendis24 martes, 14 de diciembre de 2010 13:43
    martes, 14 de diciembre de 2010 13:43
  • Creo que ya habia hecho una pregunta similar en el siguiente foro:

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/7c0e1503-b49c-48d6-82b7-18bb094d2bfc

    revisalo, si no puede descargar el ejemplo, Descargar este con una pequeña modificacion.

    En el ejemplo que suministraste mas arriba debe cambia la linea

    Response.ContentType = "application/vnd.xls";
    
    
    por
    Response.ContentType = "application/vnd.ms-excel";

    en cuanto a esto:

    entonces lo que intento de hacer es que una vez cargado el gridview, exportarlo a excel pero utilizando el dataset o el datatable, nose cual es mejor.

    Te recomiendo cargar la tabla, siempre y cuando no se encuentre en una relacion con otra tabla y necesite trabajar con valores de ambas


    Santo Domingo Republica Dominicana
    jueves, 9 de diciembre de 2010 21:37

Todas las respuestas

  • hola

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/1891bd62-97df-434d-854a-9e9f863ce482

    podrias aplciar la tecnica comentada por Enrique

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 9 de diciembre de 2010 16:23
  • Gracias leandro pero mira, yo tengo cargados datos en una tabla de la Base de Datos, y lo que hago es que al gridview (A todo esto trabajo en c# web (webform)) al gridview lo lleno por medio de llamadas a procedimientos almacenados pasandole parametros de entrada, como por ejemplo fechadesde y fechahasta que son datetimepicker, y los parametros de salida que me entrega el sp los tengo asi mira

                    SqlDataAdapter da = new SqlDataAdapter(cmd1);
                    da.Fill(ds1);

                    GridView1.DataSource = ds1;

                    Session["view"] = ds1;
                    ViewState.ToString();

                    GridView1.DataBind();

    viste y asi cargo el Gridview, entonces lo que intento de hacer es que una vez cargado el gridview, exportarlo a excel pero utilizando el dataset o el datatable, nose cual es mejor.

    jueves, 9 de diciembre de 2010 16:41
  • Miren para exportar un dataset o datatable a excel seria una cosa asi??

    protected void btnExportar_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=Informe.xls");
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.xls";

            StringWriter stringWrite = new StringWriter();
            HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

            GridView gvExport = new GridView();
           
            if (ds1.Tables[0].Rows.Count > 0)
            {
                gvExport.DataSource = ds1;
                gvExport.DataBind();
            }

            gvExport.RenderControl(htmlWrite);
            Response.Write(stringWrite.ToString());
        }

    jueves, 9 de diciembre de 2010 19:55
  • Creo que ya habia hecho una pregunta similar en el siguiente foro:

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/7c0e1503-b49c-48d6-82b7-18bb094d2bfc

    revisalo, si no puede descargar el ejemplo, Descargar este con una pequeña modificacion.

    En el ejemplo que suministraste mas arriba debe cambia la linea

    Response.ContentType = "application/vnd.xls";
    
    
    por
    Response.ContentType = "application/vnd.ms-excel";

    en cuanto a esto:

    entonces lo que intento de hacer es que una vez cargado el gridview, exportarlo a excel pero utilizando el dataset o el datatable, nose cual es mejor.

    Te recomiendo cargar la tabla, siempre y cuando no se encuentre en una relacion con otra tabla y necesite trabajar con valores de ambas


    Santo Domingo Republica Dominicana
    jueves, 9 de diciembre de 2010 21:37
  • Hola amigos despues de tanto buscar y preguntar por internet encontre la solucion y se las coloco para que a alguien mas le sirva. como consejo nunca copien y peguen codigo sin antes saber que es lo que estan copiando, yo lo aprendi en la practica. Muchas gracias por todo el apoyo.

    protected void btnExportar_Click(object sender, EventArgs e)
        {
            //para exportar sin un aspxgridview exporter
            //se debe inicializar varias clases
            try
            {
                StringBuilder sb = new StringBuilder();
                StringWriter sw = new StringWriter(sb);
                HtmlTextWriter htw = new HtmlTextWriter(sw);
                Page page = new Page();
                HtmlForm form = new HtmlForm();

                //Como el gridview esta pagina se debe quitar
                //o deshabilitar para poder exportar correctamente
                GridView1.AllowPaging = false;
                GridView1.DataBind();
                GridView1.EnableViewState = false;
                page.EnableEventValidation = false;

                page.DesignerInitialize();
                page.Controls.Add(form);
                form.Controls.Add(GridView1);

                page.RenderControl(htw);

                //le indicamos a la aplicacion que el archivo a exportar será xls
                Response.Clear();
                Response.Buffer = true;
                Response.ContentType = "application/vnd.ms-excel";

                //Le damos el nombre al archivo que queremos que cree
                Response.AddHeader("Content-Disposition", "attachment;filename= InformeDeDatos.xls");
                Response.Charset = "UTF-8";

                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.ContentEncoding = System.Text.Encoding.Default;

                Response.Write(sb.ToString());
                Response.End();

                //y finalmente lo paginamos de nuevo para que quede tal como estaba
                GridView1.AllowPaging = true;
                GridView1.DataBind();
            }
            catch (Exception exp)
            {
                //en c# web lo mensajes en pantalla hay que realizarlos con javascript, en c# windform son por defecto asi           
                string script = @"<script language = ""JavaScript"">alert('Filtre más la informacion por que se sobrepaso de los 65.536 registros del excel');</script>";
                ClientScript.RegisterStartupScript(typeof(Page), "Alerta", script);
                return;
            }
        }
    • Marcado como respuesta Aprendis24 martes, 14 de diciembre de 2010 13:43
    martes, 14 de diciembre de 2010 13:43