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:
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | |
} | |
} |
O resultado final é esse aqui:
Algumas coisas para comentar:
O método Load funciona de duas maneiras:
- Com um caminho físico, que é como estamos trabalhando. Dessa maneira, ele vai ler o arquivo de algum lugar no servidor por exemplo.
- 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 😀
Como faço para que o valor a ser substituido tenha quebra de linha passando os caracteres de \n?
GostarGostar
Opa Robson!
Você pode utilizar o método “new Break()” para quebrar uma linha 😀
Abraço!
GostarGostar
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 ?
GostarGostar
É 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!
GostarGostar
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 ?
GostarGostar
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!
GostarGostar
Muito bem meu amigo Vinicius, muito útil, vou usar sua dica em uma solução para um consultório (contrato). Obrigado. Alessandro Fukuta
GostarGostar
Fico feliz em ajudar Alessandro!
GostarGostar
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.’
GostarGostar
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
GostarGostar