Exportando dados de uma página ASP.NET para Excel

De vez em quando temos a missão de exportar um grid ou um DataSet para excel ou CSV, seguem aqui duas funções que vão resolver o problema de vocês:

public void ExportForExcel(Page pagina, DataSet ds, String filename)
{

DataGrid dg = new DataGrid();
dg.AutoGenerateColumns = true;
dg.DataSource = ds.Tables[0];
dg.DataBind();
pagina.Response.Clear();
pagina.Response.ContentType = "application/vnd.ms-excel";
pagina.Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".xls");
dg.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
dg.RenderControl(hw);
pagina.Response.End();
}
Ou para um CSV:

public void ExportForExcelCSV(Page pagina ,DataSet ds, String filename)
{
pagina.Response.Clear();
pagina.Response.Buffer = true;
//Response.Charset = "UTF-8";
pagina.Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename + ".csv");
pagina.Response.ContentEncoding = System.Text.Encoding.Default;
pagina.Response.ContentType = "application/ms-excel";

StringWriter stw = new StringWriter();

HtmlTextWriter htextw = new HtmlTextWriter(stw);

//Montar colunas
string tab = "";
DataTable dt = ds.Tables[0];
foreach (DataColumn dc in dt.Columns)
{
pagina.Response.Write(tab + dc.ColumnName);
tab = ";";
}
pagina.Response.Write("\r\n");

//Montar linhas
int i;
foreach (DataRow dr in dt.Rows)
{
tab = "";
for (i = 0; i < dt.Columns.Count; i++) { pagina.Response.Write(tab + dr[i].ToString()); tab = ";"; } pagina.Response.Write("\r\n"); } pagina.Response.End();
}

Comentários

Postagens mais visitadas