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
- Generera Word-dokument från en mall med hjälp av C#-objektets värden
- Generera Word-dokument med hjälp av en XML-datakälla
- Skapa Word-dokument med en JSON-datakälla
- Skapa Word-dokument med en CSV-datakälla
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.