Exportando dados para Word e Excel usando C#

Postado por: Tiago Lemos em 24th out, 2008 | Categoria: C#, HTML, VB

Há algum tempo atrás tive um problema com exportação para Word e Excel, no componente RadGrid do Telerik. O problema estava na exportação dos dados para Word e Excel do Office 2007.

Em busca de uma solução que fosse resolver este problema de exportação, indiferente da versão do Office que o usuário possui em sua máquina, eu e meu Gerente de Projetos utilizamos um artifico do Office em que uma estrutura de tabela (table - HTML) é transformada em tabela para o Word ou para o Excel:

Abaixo a descrição de como pode ser feita essa exportação:

  1. Cria-se uma string vazia;
  2. Escreve na string uma estrutura de tabela em HTML, neste caso a tabela deverá ter os dados a serem exportados;
  3. Alteramos os ContentType e AddHeader da página que irá exportar os dados;
  4. Retorne o valor da string para o usuário.

Abaixo segue um exemplo do código para exportar dados:


     //Primeiro cria uma string
     string tabela = String.Empty;

     //Monte uma estrutura HTML
     tabela += <table>
     tabela += <tr><td>Informação 1</td><td>Informação 2</td></tr>
     tabela += <tr><td>Informação 3</td><td>informação 4</td></tr>
     tabela += </table>

     //Escolha se irá exportar para Word ou Excel
     HttpContext.Current.Response.ContentType = "application/vnd.doc";
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Dados.doc");

     HttpContext.Current.Response.ContentType = "application/vnd.xls";
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Dados.xls");

     //Define o Encoding da página
     HttpContext.Current.Response.ContentEncoding = Encoding.Default;

     //Escreva a string
     HttpContext.Current.Response.Write(tabela);
     HttpContext.Current.Response.End();
     

É uma solução simples que funciona tanto no Office (Word/Excel) 2003 e 2007. O código está escrito em C#, mas pode ser utilizado com VB sem nenhum problema.