Olá pessoal, meu nome é Mauricio Junior e hoje eu vou falar e mostrar como gerar arquivo Word através de um código web usando a linguagem C# e com a tecnologia ASP.NET, ou seja, parte Web.

Tecnologias utilizadas

  • Linguagem: C#
  • Ferramenta de desenvolvimento: Visual Studio
  • Plataforma: Web
  • Funciona no browser, qualquer um

Em resumo, este artigo é bem simples e funciona em qualquer browser existente até hoje (data de publicação do artigo). Para iniciar é importante ter instalado as ferramentas utilizadas, lembrando que o código aqui pode funcionar nos outros editores sem qualquer problema. Você pode também buscar os valores do banco de dados para depois exibir na página como relatório para gerar o arquivo em Word. Na verdade, o browser mostra como se fosse um editor de texto com os valores escritos, esse editor você pode jogar ou gravar em qualquer extensão que achar necessário ou que tive em seu computador como o Open Office ou o próprio Office (Word).

Imagens

Criando o projeto, segue a figura 1.

https://s3-us-west-2.amazonaws.com/ecode10-image/b40790ba-c3ba-4203-b19c-ff670de93a6aWord-1.png

Figura 1 - Criando um projeto Web com a linguagem C#

A figura 2 mostra a escolha do tipo de template.

Image

Figura 2 - Escolhendo o template Empty

A figura 3 mostra a solution Explorer com todos os arquivos criados.

Image

Figura 3 - Projeto criado

A figura 4 mostra como criar o arquivo com a extensão .aspx. Criando o arquivo Webform1.aspx.

Image

Figura 4 - Criando arquivo

A figura 4 é para mostrar o código fonte da página.

Figura 4 - Arquivo .aspx para gerar o Word.

Código

O primeiro passo é criar um projeto do tipo Web usando a linguagem C#, o template pode ser de qualquer tipo que quiser, mas aqui eu vou fazer usando Web Form. Depois vamos criar um arquivo chamado WebForm1.aspx sem a utilização de MasterPage como geralmente é utilizado e criado.

Existe um código principal responsável por pegar todo o HTML da página e transcrever para o arquivo texto Word. É lógico que o método deve ser chamado depois que todos os dados carregados em tela, como busca dos dados no banco de dados.

O primeiro passo é limpar todo o response, informar que tem buffer, informar o tipo de conteúdo que é application/msword e depois basta utilizar o StringWriter e o HtmlTextWriter.

Código 1 - Método principal

protected void GerarWord() {

	Response.Clear();
	Response.Buffer = true;
	Response.ContentType = "application/msword";
	Response.Charset = "";
	this.EnableViewState = false;

	System.IO.StringWriter _oString = new System.IO.StringWriter();
	System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(_oString);
	Response.Write(_oString.ToString());

}

Funcionando

Execute o projeto clicando F5 ou clicando no botão play dentro da ferramenta. Note que o browser irá abrir, o código será executado e depois de tudo pronto, isto é, na página HTML, os dados serão transformados em editor de texto (Word e outros). Em muitos casos o arquivo pode ser feito download de forma automática pelo navegador.

Recomendações

Algumas línguas como, Português e Francês possuem acentos e caracteres especiais. Como a linguagem principal de desenvolvimento de software é em inglês, os acentos viram outros caracteres diferentes nas palavras. Para resolver esse problema de acento, basta adicionar na página um enconding iso-8859-1 antes de mandar o arquivo Word.

O código 2 mostra como fazer isso.

Código 2 - Deixando os acentos funcionando

	protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
            GeraWord();
        }
    }

O código faz com que os acentos funcionem perfeitamente dentro do arquivo e da página.

O resultado do código 1 sem o encoding é mostrado na figura 5. Depois que gerou o arquivo, a palavra "página" possui um caracter truncado, a palavra "usuário" também. Veja a figura 5.

Image

Figura 5 - Resultado sem o encoding

A figura 6 mostra o resultado depois de colocar o enconding no Page_Load da página antes de chamar o método que gera o arquivo word. Veja a figura 6.

Image

Caso você não tenha o word em seu computador, o arquivo será feito download de forma automática.

Bom, eu fico por aqui e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org. Abraços.