Funcion para exportar un DataTable a Excel(o CSV)

by ryudice on October 3, 2009

Bueno es bien comun que el usuario se emociona al ver los Gridview y quiera exportarlos a excel, esta es una funcion diseniada para funcionar en ASP.NET, que le pasan un DataTable como parametro y el nombre del archivo que se va descargar, al ejecutarla, automaticamente se le envia el usuario el archivo para que lo pueda descargar (le aparecera la ventana  del navegador de descargar archivo). De antemano les digo que la funcion  tiene un error cuando uno de los campos lleva comas, es algo sencillo de arreglar pero por falta de tiempo no lo he hecho, aparte de que la funcion la escribi hace mucho tiempo y tendria que leer el codigo de nuevo. Esta es la funcion:

[sourcecode language='csharp']private void ExportDataTableToCSV(DataTable dt, string filename)
{
DataTable toExcel = dt.Copy();
HttpContext context = HttpContext.Current;

/* Iteramos cada una de las columnas del datatable para
* escribir el encabezado del CSV */
foreach (DataColumn column in toExcel.Columns)
{
context.Response.Write(column.ColumnName + “,”);

}
// Creamos una nueva linea en el archivo despues de escribir el
// encabezado
context.Response.Write(Environment.NewLine);

/* Empezamos a escribir cada una de las columnas
* de cada fila separadas por comas */
foreach (DataRow row in toExcel.Rows)
{
for (int i = 0; i < toExcel.Columns.Count; i++)
{
context.Response.Write(row[i].ToString().Replace(“,”, string.Empty) + “,”);
}
// Se finalizo de escribir la fila, asi que creamos una nueva linea
context.Response.Write(Environment.NewLine);
}

// Agregamos los headers HTTP para que el archivo sea descargado
context.Response.ContentType = “text/csv”;
context.Response.AppendHeader(“Content-Disposition”, “attachment; filename=” + filename + “.csv”);
context.Response.End();
} [/sourcecode]

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Twitter

Related posts:

  1. Tip: Como usar un enum como datasource en C# y ASP.NET
  2. Marcando un metodo o funcion como obsoleto en .NET

{ 3 comments… read them below or add one }

omar December 21, 2009 at 4:49 pm

gracias me sirvió, mucho eres un pinche genio, me cae de madre.

Deazu September 30, 2010 at 8:03 pm

Muchas gracias por el post.

Cuando el mismo texto contiene comas, es aconsejable usar un delimitador. De esta manera se diferencian los separadores de columna, con las comas del mismo texto. Habitualmente se usan comillas.

[sourcecode language='csharp']private void ExportDataTableToCSV(DataTable dt, string filename)
{
DataTable toExcel = oTablaROEDetalle.Copy();

HttpContext context = HttpContext.Current;

/* Iteramos cada una de las columnas del datatable para
* escribir el encabezado del CSV */
foreach (DataColumn column in toExcel.Columns)
{
context.Response.Write(“\”" + column.ColumnName + “\”,”);
}
// Creamos una nueva linea en el archivo despues de escribir el
// encabezado
context.Response.Write(Environment.NewLine);

/* Empezamos a escribir cada una de las columnas
* de cada fila separadas por comas */
foreach (DataRow row in toExcel.Rows)
{
for (int i = 0; i < toExcel.Columns.Count; i++)
{
context.Response.Write("\"" + row[i].ToString() + "\",");
}
// Se finalizo de escribir la fila, asi que creamos una nueva linea
context.Response.Write(Environment.NewLine);
}

// Agregamos los headers HTTP para que el archivo sea descargado
context.Response.ContentType = “text/csv”;
context.Response.AppendHeader(“Content-Disposition”, “attachment; filename=” + filename + “.csv”);
context.Response.End();
} [/sourcecode]

yo November 24, 2010 at 4:47 pm

Sos un groso Sabelo

Leave a Comment

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

PensandoEnCodigo is Digg proof thanks to caching by WP Super Cache