Substituindo textos de um documento Word com C#

Fala galera, tudo certo?

Hoje vou mostrar como é fácil fazer edições em documentos Word (.doc ou .docx) e mais especificamente vou mostrar como substituir textos dentro de um documento, bora lá?

A ideia de escrever sobre isso surgiu quando surgiu a necessidade de enviar cartas para alguns clientes, e essas cartas já tinham um padrão pré definido, bastando apenas substituir alguns dados pessoais.

Imaginem que temos o seguinte arquivo:

2

O primeiro passo depois de criarmos a nossa aplicação C#, é instalar um pacote do NuGet chamado DocX, podemos fazer isso com o seguinte comando no Package Manager Console:

PM> Install-Package DocX -Version 1.3.0

 

Feito isso, o código para efetuarmos a leitura do nosso arquivo e a substituição das palavras é o seguinte:


string caminho = @"C:\Users\Vinicius Mussak\Desktop\ReplaceDocxExample\ReplaceDocxExample\";
static void Replace()
{
using(var documento = DocX.Load(caminho + "documento.docx"))
{
documento.ReplaceText("#nome", "Vinicius Mussak");
string mes = DateTime.Now.ToString("MMMM", CultureInfo.CreateSpecificCulture("pt-br"));
documento.ReplaceText("#mes", mes);
documento.SaveAs(caminho + "novo-documento.docx");
}
}

view raw

ReplaceDocx.cs

hosted with ❤ by GitHub

O resultado final é esse aqui:

3

Algumas coisas para comentar:

O método Load funciona de duas maneiras:

  1. Com um caminho físico, que é como estamos trabalhando. Dessa maneira, ele vai ler o arquivo de algum lugar no servidor por exemplo.
  2. Com um Stream, ou seja, ao invés de passarmos o caminho do arquivo, podemos passar o próprio arquivo já convertido em Stream.

O método SaveAs funciona da mesma maneira do método Load, ou seja, podemos salvar o arquivo editado de maneira física, ou colocá-lo novamente em uma Stream para fazer outras coisas com ele.

No exemplo estamos apenas substituindo palavras de um documento, mas a ferramenta é capaz de fazer muitas outras coisas em um documento, para saber mais, é só dar uma olhada da documentação aqui: https://github.com/xceedsoftware/docx

Belezura né?

Os códigos utilizados estão disponíveis no GitHub: https://github.com/vmussak/docx-replace-text

Por hoje é só isso, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

Advertisement

10 thoughts on “Substituindo textos de um documento Word com C#

  1. Robson Silva Brito de Moraes 06/11/2020 / 19:38

    Como faço para que o valor a ser substituido tenha quebra de linha passando os caracteres de \n?

    Gostar

    • viniciusmussak 22/04/2021 / 21:57

      Opa Robson!
      Você pode utilizar o método “new Break()” para quebrar uma linha 😀
      Abraço!

      Gostar

  2. Luis Sousa 03/12/2020 / 23:41

    Você acha que é possível ler dados de tabela em um documento word ? Se eu souber o padrão do documento, tem como eu ler os dados, armazenar em variáveis e usar na minha aplicação ?

    Gostar

    • viniciusmussak 22/04/2021 / 21:52

      É possível sim Luis! Já fiz isso em aplicações aqui! Caso queira posso te mandar um exemplo! Me dá um ping que conversamos!
      Abraço!

      Gostar

  3. Jhonatan Azevedo 15/04/2021 / 12:01

    Estou tentando rodar o código acima mas apresenta erro nesta linha using(var documento = DocX.Load(caminho + “documento.docx”)). Sabe me dizer se a biblioteca mudou algo ?

    Gostar

    • viniciusmussak 22/04/2021 / 21:51

      Opa Jhonatan! Tudo certo?
      Rapaz, até onde sei, não mudou não, já verificou se o caminho do documento está correto?
      Se quiser me dê um alô que podemos resolver juntos!
      Abraço!

      Gostar

  4. ALESSANDRO FUKUTA' 25/07/2021 / 19:02

    Muito bem meu amigo Vinicius, muito útil, vou usar sua dica em uma solução para um consultório (contrato). Obrigado. Alessandro Fukuta

    Gostar

  5. Bruno 18/05/2022 / 18:25

    Boa noite.

    Estou tentando utilizar esse exemplo, mas estou esbarrando no erro:

    System.IO.FileNotFoundException: ‘Could not load file or assembly ‘System.IO.Packaging, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’. O sistema não pode encontrar o arquivo especificado.’

    Gostar

    • viniciusmussak 18/05/2022 / 18:50

      Fala Bruno! Tudo certo?

      Já verificou se o caminho do arquivo está correto?

      Caso queira, me dê um ping por e-mail que a gente vê isso! 🙂

      vinicius.mussak (at) outlook.com

      Gostar

Deixe uma Resposta para Bruno Cancelar resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s