Gerar o Word a partir do modelo em C#

A geração automatizada de documentos do Word é amplamente utilizada pelas empresas para a criação de uma infinidade de relatórios. Em alguns casos, os documentos são criados do zero. Por outro lado, os modelos predefinidos são usados para gerar documentos do Word preenchendo os espaços reservados. Neste artigo, demonstrarei como gerar documentos do Word a partir de modelos de forma dinâmica e programática em C#. Você saberá como preencher os modelos do Word de diferentes tipos de fontes de dados.

Os seguintes cenários, juntamente com os exemplos de código, serão abordados neste artigo:

API de automação do Word C#

Usaremos Aspose.Words for .NET - Uma API de automação do Word que permite gerar documentos do Word do zero ou preenchendo os modelos predefinidos do Word. Você pode baixar binários da API ou instalá-los usando um dos seguintes métodos.

Usando o Gerenciador de Pacotes NuGet

Usando o Console do Gerenciador de Pacotes

PM> Install-Package Aspose.Words

Gerar documento do Word a partir do modelo usando objetos C#

Antes de tudo, vamos ver como preencher o modelo do Word usando os objetos C#. Para isso, criaremos um documento Word (DOC/DOCX) com os seguintes placeholders como conteúdo do documento:

<<[sender.Name]>> says: "<<[sender.Message]>>."

Aqui, o remetente é o objeto da classe a seguir que usaremos para preencher o modelo.

public class Sender
{
	public string Name { get; set; }
	public string Message { get; set; }

	public Sender (string _name, string _message)
	{
		Name = _name;
		Message = _message;
	}
}

Agora, usaremos o mecanismo de relatório do Aspose.Words para gerar o documento do Word a partir do modelo e do objeto da classe Sender seguindo as etapas abaixo.

  • Crie um objeto da classe Document e inicialize-o com o caminho do modelo do Word.
  • Crie e inicialize um objeto da classe Sender.
  • Instanciar a classe ReportingEngine.
  • Preencha os modelos usando ReportingEngine.BuildReport() que usa o objeto do Documento, a fonte de dados e o nome da fonte de dados como parâmetros.
  • Salve o documento do Word gerado usando o método Document.Save().

O exemplo de código a seguir mostra como gerar um documento do Word a partir de um modelo em C#.

Document doc = new Document("template.docx");
Sender sender = new Sender("LINQ Reporting Engine", "Hello World");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, sender, "sender");
doc.Save("word.docx");

Resultado

Gerar documento do Word de uma fonte de dados XML em C#

Para gerar o documento do Word a partir de uma fonte de dados XML, usaremos um modelo do Word um pouco mais complexo com os seguintes espaços reservados:

<<foreach [in persons]>>Name: <<[Name]>>, Age: <<[Age]>>, Date of Birth: <<[Birth]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.Average(p => p.Age)]>>

A fonte de dados XML que usei neste exemplo é fornecida abaixo.

<Persons>
   <Person>
       <Name>John Doe</Name>
       <Age>30</Age>
       <Birth>1989-04-01 4:00:00 pm</Birth>
   </Person>
   <Person>
       <Name>Jane Doe</Name>
       <Age>27</Age>
       <Birth>1992-01-31 07:00:00 am</Birth>
   </Person>
   <Person>
       <Name>John Smith</Name>
       <Age>51</Age>
       <Birth>1968-03-08 1:00:00 pm</Birth>
   </Person>
</Persons>

A seguir estão as etapas para gerar um documento do Word a partir de uma fonte de dados XML:

  • Crie uma instância da classe Document e inicialize-a com o caminho do modelo do Word.
  • Crie uma instância da classe XmlDataSource e inicialize-a com o caminho do arquivo XML.
  • Instanciar a classe ReportingEngine.
  • Use o método ReportingEngine.BuildReport() da mesma forma que usamos antes para preencher o modelo do Word.
  • Salve o documento do Word gerado usando o método Document.Save().

O exemplo de código a seguir mostra como gerar um documento do Word de uma fonte de dados XML em C#.

Document doc = new Document("template.docx");
XmlDataSource dataSource = new XmlDataSource("datasource.xml");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "persons");
doc.Save("word.docx");

Resultado

Gerar documento do Word de uma fonte de dados JSON em C#

Vamos agora ver como gerar um documento do Word usando uma fonte de dados JSON. Neste exemplo, geraremos uma lista dos clientes agrupados por seus gerentes. O seguinte seria o modelo do Word neste caso:

<<foreach [in managers]>>Manager: <<[Name]>>
Contracts:
<<foreach [in Contract]>>- <<[Client.Name]>> ($<<[Price]>>)
<</foreach>>
<</foreach>>

A seguir, a fonte de dados JSON que usaremos para preencher o modelo:

[
   {
       Name: "John Smith",
       Contract:
       [
           {
               Client:
               {
                   Name: "A Company"
               },
               Price: 1200000
           },
           {
               Client:
               {
                   Name: "B Ltd."
               },
               Price: 750000
           },
           {
               Client:
               {
                   Name: "C & D"
               },
               Price: 350000
           }
       ]
   },
   {
       Name: "Tony Anderson",
       Contract:
       [
           {
               Client:
               {
                   Name: "E Corp."
               },
               Price: 650000
           },
           {
               Client:
               {
                   Name: "F & Partners"
               },
               Price: 550000
           }
       ]
   },
]

Para gerar o documento do Word a partir de JSON, usaremos a classe JsonDataSource para carregar e usar a fonte de dados JSON e as demais etapas permanecerão as mesmas. O exemplo de código a seguir mostra como gerar um documento do Word a partir do modelo usando JSON em C#.

Document doc = new Document("template.docx");
JsonDataSource dataSource = new JsonDataSource("datasource.json");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "managers");
doc.Save("word.docx");

Resultado

Gerar documento do Word da fonte de dados CSV em C#

Para gerar o documento do Word a partir do CSV, usaremos o seguinte modelo do Word:

<<foreach [in persons]>>Name: <<[Column1]>>, Age: <<[Column2]>>, Date of Birth: <<[Column3]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<[persons.Average(p => p.Column2)]>>

O modelo será preenchido com os seguintes dados CSV:

John Doe,30,1989-04-01 4:00:00 pm
Jane Doe,27,1992-01-31 07:00:00 am
John Smith,51,1968-03-08 1:00:00 pm

Agora, vamos ao código C#. Todas as etapas permanecerão as mesmas aqui, exceto por uma alteração que é usar a classe CsvDataSource para carregar os dados CSV. O exemplo de código a seguir mostra como gerar o documento do Word de uma fonte de dados CSV.

Document doc = new Document("template.docx");
CsvDataSource dataSource = new CsvDataSource("datasource.csv");
ReportingEngine engine = new ReportingEngine();
engine.BuildReport(doc, dataSource, "persons");
doc.Save("word.docx");

Resultado

Experimente o Aspose.Words for .NET gratuitamente

Você pode experimentar o Aspose.Words for .NET usando uma licença temporária gratuita.

Conclusão

Neste artigo, você aprendeu como gerar documentos do Word a partir de modelos usando C#. Além disso, você viu como usar objetos, fontes de dados XML, JSON e CSV para gerar documentos do Word. Você pode explorar mais sobre a API de automação do Word C# usando documentação. Além disso, você pode entrar em contato conosco através do nosso fórum.

Veja também