Como exportar um datatable ou gridview para excel

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.

2 comentários:

Anônimo disse...

Muito obrigado pelo tuto.
Utilizando o código e alterando conforme necessidade, consegui gerar o arquivo do grid no excel.

DaniloBSi disse...

Legal. Se precisar, veja alguns dos outros tutoriais ou entre em contato.

Boa sorte!