Buen Día a Todos
Cuantas veces hemos querido exportar los datos que poseemos en una tabla (GridView) de un WebForm, una pagina web, a una hoja de Excel, o a cualquier Programa Manejador de Hojas de Calculo como OpenOffice, a PDF o a un simple archivo de Texto.
Aquí coloco una solución simple pero funcional.
Cuantas veces hemos querido exportar los datos que poseemos en una tabla (GridView) de un WebForm, una pagina web, a una hoja de Excel, o a cualquier Programa Manejador de Hojas de Calculo como OpenOffice, a PDF o a un simple archivo de Texto.
Aquí coloco una solución simple pero funcional.
//Codigo para C# //Suponemos que tenemos una GridView llamada gridView_ //la cual queremos bajar a Excel //Este codigo lo podemos colocar en el evento click de algun botón //Se ocupa: //using System.Text; //using System.IO; StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter hw = new HtmlTextWriter(sw); Page pagina = new Page(); HtmlForm form = new HtmlForm(); pagina.Controls.Add(form); form.Controls.Add(gridView_); pagina.EnableEventValidation = false; pagina.DesignerInitialize(); pagina.RenderControl(hw); 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();
Ahora suponiendo que no tenemos un GridView, pero si un DataTable que queremos bajar a Excel
En ese caso, tendremos que generar el GridView:
En ese caso, tendremos que generar el GridView:
//Codigo para C# //Suponemos que tenemos una DataTable llamada tabla //la cual queremos bajar a Excel //Este codigo lo podemos colocar en el evento click de algun botón //Se ocupa: //using System.Text; //using System.IO; GridView gridView_ = new GridView(); StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter hw = new HtmlTextWriter(sw); Page pagina = new Page(); HtmlForm form = new HtmlForm(); gridView_.DataSource = tabla; gridView_.DataBind(); pagina.Controls.Add(form); form.Controls.Add(gridView_); pagina.EnableEventValidation = false; pagina.DesignerInitialize(); pagina.RenderControl(hw); 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();
Convertir DataTable a CSV y lanzarlo a Excel en el cliente
Ahora, queremos lanzar un archivo .CSV de una DataTable, el siguiente método hace lo necesario, y lanza el archivo armado para ser abierto con Excel,
public static void Exportar_DataTable_a_CSV(Page page, DataTable tabla) { string archivo = ""; int i = 0; int j = 0; try { archivo += "Mando esta tabla, Fecha de hoy: " + DateTime.Now.ToShortDateString() + "\n"; if (tabla.Rows.Count > 0) { //Imprimimos los encabezados (Headers) for (i = 0; i < tabla.Columns.Count; i++) { archivo += tabla.Columns[i].ColumnName; archivo += ","; } archivo += "\n"; for (i = 0; i < tabla.Rows.Count; i++) {//Iteramos en los elementos extrayendo la info y colocandola en formato CSV for (j = 0; j < tabla.Rows[i].ItemArray.Length; j++) { archivo += tabla.Rows[i].ItemArray[j].ToString(); archivo += ","; } archivo += "\n"; } } else { archivo += "No existen Registros"; } page.Response.Clear(); page.Response.Buffer = true; page.Response.ContentType = "application/vnd.ms-excel"; page.Response.AddHeader("Content-Disposition", "attachment;filename=mitablita.csv"); page.Response.Charset = "UTF-8"; page.Response.ContentEncoding = Encoding.Default; page.Response.Write(archivo); page.Response.End(); } catch(Exception ex) { page.ClientScript.RegisterStartupScript(page.GetType(), "Redirecicon", ""); Debug.WriteLine(ex); Debug.WriteLine(ex.StackTrace); } }
Lo podemos usar de la siguiente manera (tablita es un DataTable que contiene cierta info):
Exportar_DataTable_a_CSV(this, tablita)
Por cierto que para usarlo debemos agregar las librerias:
System.Data; System.Web.SessionState; System.IO; System.Diagnostics;
Explico el codigo de manera rapida:
* El chiste de la descarga de la Tabla a Excel es bajar un archivo con codigo HTML que contendra una pagina web con una sola tabla (la gridview o datatble que deseamos), debido a que Excel es bonito y sabe interpretar HTML la podremos visualizar sin problema.
* Creamos un nuevo Html Form, es decir, una nueva pagina web, que contendra una gridview.
* La gridview que contendra dicha pagina web será la misma que queremos descargar a Excel, o en el otro caso asignamos la dataTable a un objeto girdview nuevo.
* Renderizamos los controles (Inicializamos)
* Descargamos la pagina web completa, que sea abierta por Excel y listo.
* En el caso de la descarga a csv, que es mucho mas ligera y rapida, ya que usa un algoritmo sencillísimo, cuidado si el campo contiene comas.
Con especiales gracias a:
Codigo en VB por Chalalo
Tags:
* El chiste de la descarga de la Tabla a Excel es bajar un archivo con codigo HTML que contendra una pagina web con una sola tabla (la gridview o datatble que deseamos), debido a que Excel es bonito y sabe interpretar HTML la podremos visualizar sin problema.
* Creamos un nuevo Html Form, es decir, una nueva pagina web, que contendra una gridview.
* La gridview que contendra dicha pagina web será la misma que queremos descargar a Excel, o en el otro caso asignamos la dataTable a un objeto girdview nuevo.
* Renderizamos los controles (Inicializamos)
* Descargamos la pagina web completa, que sea abierta por Excel y listo.
* En el caso de la descarga a csv, que es mucho mas ligera y rapida, ya que usa un algoritmo sencillísimo, cuidado si el campo contiene comas.
Con especiales gracias a:
Codigo en VB por Chalalo
Tags:
- Exportar DataTable a Excel (ASP .Net)
- Exportar GridView a Excel (ASP .Net)
- Descargar GridView a Excel
- Exportar DataTable en CSV
- Exportar DataTable C#
- Descargar DataTable a Excel
- Descargar Tabla como CSV
- Crear y descargar archivo del servidor