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 😀

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

  1. Robson Silva Brito de Moraes's avatar 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's avatar 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's avatar 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's avatar 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's avatar 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's avatar 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''s avatar 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's avatar 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's avatar 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 um comentário