Générer Word à partir d'un modèle en C#

La génération automatisée de documents Word est largement utilisée par les entreprises pour créer une multitude de rapports. Dans certains cas, les documents sont créés à partir de zéro. D’autre part, des modèles prédéfinis sont utilisés pour générer des documents Word en remplissant les espaces réservés. Dans cet article, je vais vous montrer comment générer dynamiquement et par programmation des documents Word à partir de modèles en C#. Vous saurez comment remplir les modèles Word à partir de différents types de sources de données.

Les scénarios suivants ainsi que les exemples de code seront couverts dans cet article :

API d’automatisation de mots C#

Nous utiliserons Aspose.Words for .NET - Une API d’automatisation Word qui vous permet de générer un document Word à partir de zéro ou en remplissant les modèles Word prédéfinis. Vous pouvez soit télécharger les binaires de l’API ou l’installer en utilisant l’une des méthodes suivantes.

Utilisation du gestionnaire de packages NuGet

Utilisation de la console du gestionnaire de packages

PM> Install-Package Aspose.Words

Générer un document Word à partir d’un modèle à l’aide d’objets C#

Tout d’abord, voyons comment remplir le modèle Word à l’aide des objets C#. Pour cela, nous allons créer un document Word (DOC/DOCX) avec les espaces réservés suivants comme contenu du document :

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

Ici, l’expéditeur est l’objet de la classe suivante que nous utiliserons pour remplir le modèle.

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

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

Maintenant, nous allons utiliser le moteur de rapport d’Aspose.Words pour générer le document Word à partir du modèle et de l’objet de la classe Sender en suivant les étapes ci-dessous.

  • Créez un objet de la classe Document et initialisez-le avec le chemin du modèle Word.
  • Créez et initialisez un objet de la classe Sender.
  • Instanciez la classe ReportingEngine.
  • Remplissez les modèles à l’aide de ReportingEngine.BuildReport() qui prend l’objet du document, la source de données et le nom de la source de données comme paramètres.
  • Enregistrez le document Word généré à l’aide de la méthode Document.Save().

L’exemple de code suivant montre comment générer un document Word à partir d’un modèle en 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");

Production

Générer un document Word à partir d’une source de données XML en C#

Pour générer le document Word à partir d’une source de données XML, nous utiliserons un modèle Word un peu plus complexe avec les espaces réservés suivants :

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

La source de données XML que j’ai utilisée dans cet exemple est donnée ci-dessous.

<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>

Voici les étapes pour générer un document Word à partir d’une source de données XML :

  • Créez une instance de la classe Document et initialisez-la avec le chemin du modèle Word.
  • Créez une instance de la classe XmlDataSource et initialisez-la avec le chemin du fichier XML.
  • Instanciez la classe ReportingEngine.
  • Utilisez la méthode ReportingEngine.BuildReport() de la même manière que nous avons utilisée auparavant pour remplir le modèle Word.
  • Enregistrez le document Word généré à l’aide de la méthode Document.Save().

L’exemple de code suivant montre comment générer un document Word à partir d’une source de données XML en 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");

Production

Générer un document Word à partir d’une source de données JSON en C#

Voyons maintenant comment générer un document Word à l’aide d’une source de données JSON. Dans cet exemple, nous allons générer une liste des clients regroupés par leurs responsables. Ce qui suit serait le modèle Word dans ce cas :

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

Voici la source de données JSON que nous utiliserons pour remplir le modèle :

[
   {
       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
           }
       ]
   },
]

Pour générer le document Word à partir de JSON, nous utiliserons la classe JsonDataSource pour charger et utiliser la source de données JSON et le reste des étapes restera le même. L’exemple de code suivant montre comment générer un document Word à partir du modèle à l’aide de JSON en 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");

Production

Générer un document Word à partir d’une source de données CSV en C#

Pour générer le document Word à partir de CSV, nous utiliserons le modèle Word suivant :

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

Le modèle sera rempli avec les données CSV suivantes :

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

Venons-en maintenant au code C#. Toutes les étapes resteront les mêmes ici également, à l’exception du seul changement, à savoir que nous utiliserons la classe CsvDataSource pour charger les données CSV. L’exemple de code suivant montre comment générer le document Word à partir d’une source de données 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");

Production

Essayez gratuitement Aspose.Words for .NET

Vous pouvez essayer Aspose.Words for .NET en utilisant une licence temporaire gratuite.

Conclusion

Dans cet article, vous avez appris à générer des documents Word à partir de modèles à l’aide de C#. De plus, vous avez vu comment utiliser des objets, des sources de données XML, JSON et CSV pour générer des documents Word. Vous pouvez en savoir plus sur l’API d’automatisation C# Word à l’aide de documentation. De plus, vous pouvez nous contacter via notre forum.

Voir également