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]
Related posts:
{ 3 comments… read them below or add one }
gracias me sirvió, mucho eres un pinche genio, me cae de madre.
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]
Sos un groso Sabelo