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)Ou para um CSV:
{
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();
}
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
Postar um comentário