Existem diversas maneiras de se exportar gridviews ou datables para excel, sendo que vou expor aqui 1 forma de cada se realizar a exportação.
1. Exportar um DataTable para Excel: Esta é uma das melhores formas de se exportar informações para o excel, já que o programador monta exatamente como quer o arquivo em excel (apesar de no exemplo abaixo estar usando comandos como "\t" e "\n" para separar as colunas e linhas no excel, pode-se também utilizar html para montar a tabela e definir cores e estilos a planilha.
public static void ExportarExcel(
DataTable dt,
HttpResponse Response) { Response.ClearContent(); Response.ContentEncoding = System.Text.Encoding.Default; Response.AddHeader(
"content-disposition",
"attachment; filename=relatorio.xls"); Response.ContentType = "application/vnd.ms-excel"; string tab = ""; foreach (DataColumn dc in dt.Columns) { Response.Write(tab + dc.ColumnName); tab = "\t"; } Response.Write("\n"); int i; foreach (DataRow dr in dt.Rows) { tab = ""; for (i = 0; i < dt.Columns.Count; i++) { Response.Write(tab + dr[i].ToString()); tab = "\t"; } Response.Write("\n"); } Response.End(); }
2. Exportar um grid view para Excel: É a forma mais fácil de se
exportar informações para excel, pois basicamente você exportará o
GridView da forma que ele consta em sua página.
Obs: Apesar de nesta forma de exportação já estarmos tratando o erro "Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server",
como o controle da geração do arquivo excel é do framework, muitas vezes
podem ocorrer outros erros que podem acabar tomando muito tempo para
tratar, por isso recomendo a primeira forma de exportação, onde o
controle da geração do arquivo está com o programador.
HtmlForm form = new HtmlForm();
string attachment =
"attachment;
filename=Relatorio.xls";
Response.ClearContent();
Response.AddHeader(
"content-disposition",
attachment);
Response.ContentType = "application/ms-excel";
StringWriter stw = new StringWriter();
HtmlTextWriter htextw = new
HtmlTextWriter(stw);
form.Controls.Add(gridview1);
this.Controls.Add(form);
form.RenderControl(htextw);
Response.Write(stw.ToString());
Response.End();
Basicamente, basta substituir o nome da gridview 'gridview1' pelo nome de sua gridview, e inserir o código dentro do evento que realizará a exportação dos dados para o excel.