Generera Word från mall i C#

Den automatiska genereringen av Word-dokument används i stor utsträckning av företag för att skapa en mängd rapporter. I vissa fall skapas dokumenten från grunden. Å andra sidan används fördefinierade mallar för att generera Word-dokument genom att fylla i platshållarna. I den här artikeln kommer jag att visa hur man genererar Word-dokument från mallar dynamiskt och programmatiskt i C#. Du kommer att lära dig hur du fyller i Word-mallarna från olika typer av datakällor.

Följande scenarier tillsammans med kodexemplen kommer att behandlas i den här artikeln:

C# Word Automation API

Vi kommer att använda Aspose.Words for .NET - Ett Word-automatiserings-API som låter dig skapa Word-dokument från grunden eller genom att fylla i de fördefinierade Word-mallarna. Du kan antingen ladda ner API:s binärer eller installera det med någon av följande metoder.

Använder NuGet Package Manager

Använder Package Manager Console

PM> Install-Package Aspose.Words

Generera Word-dokument från mall med C#-objekt

Först och främst, låt oss se hur man fyller i Word-mallen med C#-objekten. För detta skapar vi ett Word-dokument (DOC/DOCX) med följande platshållare som innehåll i dokumentet:

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

Här är avsändaren objektet för följande klass som vi kommer att använda för att fylla i mallen.

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

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

Nu kommer vi att använda rapporteringsmotorn i Aspose.Words för att generera Word-dokumentet från mallen och objektet i Sender-klassen genom att följa stegen nedan.

  • Skapa ett objekt av klassen Document och initiera det med Word-mallens sökväg.
  • Skapa och initiera ett objekt av klassen Sender.
  • Instantera klass ReportingEngine.
  • Fyll i mallarna med ReportingEngine.BuildReport() som tar dokumentets objekt, datakälla och namnet på datakällan som parametrar.
  • Spara genererat Word-dokument med metoden Document.Save().

Följande kodexempel visar hur man genererar ett Word-dokument från mall i 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");

Produktion

Generera Word-dokument från en XML-datakälla i C#

För att generera Word-dokumentet från en XML-datakälla använder vi en lite mer komplex Word-mall med följande platshållare:

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

XML-datakällan som jag har använt i detta exempel ges nedan.

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

Följande är stegen för att generera ett Word-dokument från en XML-datakälla:

  • Skapa en instans av klassen Document och initiera den med Word-mallens sökväg.
  • Skapa en instans av klassen XmlDataSource och initiera den med XML-filens sökväg.
  • Instantiera ReportingEngine-klassen.
  • Använd metoden ReportingEngine.BuildReport() på samma sätt som vi har använt tidigare för att fylla i Word-mallen.
  • Spara det genererade Word-dokumentet med metoden Document.Save().

Följande kodexempel visar hur man genererar ett Word-dokument från en XML-datakälla i 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");

Produktion

Generera Word-dokument från en JSON-datakälla i C#

Låt oss nu se hur man genererar ett Word-dokument med hjälp av en JSON-datakälla. I det här exemplet genererar vi en lista över kunderna som är grupperade efter deras chefer. Följande skulle vara Word-mallen i det här fallet:

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

Följande skulle vara JSON-datakällan som vi kommer att använda för att fylla i mallen:

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

För att generera Word-dokumentet från JSON kommer vi att använda klassen JsonDataSource för att ladda och använda JSON-datakällan och resten av stegen kommer att förbli desamma. Följande kodexempel visar hur man genererar ett Word-dokument från mallen med JSON i 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");

Produktion

Generera Word-dokument från CSV-datakälla i C#

För att skapa Word-dokumentet från CSV använder vi följande Word-mall:

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

Mallen kommer att fyllas i med följande CSV-data:

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

Låt oss nu komma till C#-koden. Alla steg kommer att förbli desamma även här förutom den ena ändringen som är att vi använder klassen CsvDataSource för att ladda CSV-data. Följande kodexempel visar hur du genererar Word-dokumentet från en CSV-datakälla.

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");

Produktion

Prova Aspose.Words för .NET gratis

Du kan prova Aspose.Words för .NET med en gratis tillfällig licens.

Slutsats

I den här artikeln har du lärt dig hur du skapar Word-dokument från mallar med C#. Vidare har du sett hur man använder objekt, XML, JSON och CSV-datakällor för att generera Word-dokument. Du kan utforska mer om C# Word automation API med dokumentation. Dessutom kan du kontakta oss via vårt forum.

Se även