.NET版Word處理控件Aspose.Words功能演示:從C#.NET中的模板生成Word文檔
Word文檔的自動生成已被企業(yè)廣泛用于創(chuàng)建大量報告。在某些情況下,文檔是從頭開始創(chuàng)建的。另一方面,預定義的模板用于通過填充占位符來生成Word文檔。
在本文中,我將演示如何在C#中以動態(tài)方式和編程方式從模板生成Word文檔。將了解如何從不同類型的數(shù)據(jù)源填充Word模板。本文將介紹以下方案以及代碼示例:
- 使用C#對象的值從模板生成Word文檔。
- 使用XML數(shù)據(jù)源生成Word文檔。
- 使用JSON數(shù)據(jù)源生成Word文檔。
- 使用CSV數(shù)據(jù)源生成Word文檔。
Aspose.Words for .NET已升級至V20.3,如果你還沒有用過Aspose.Words可以點擊這里下載最新版測試。
使用C#對象從模板生成Word文檔
首先,讓我們看看如何使用C#對象填充Word模板。為此,我們將創(chuàng)建一個Word文檔(DOC / DOCX),該文檔具有以下占位符作為文檔的內容:
<<[sender.Name]>> says: "<<[sender.Message]>>."
在這里,發(fā)送者是以下類的對象,我們將使用該類來填充模板。
public class Sender { public string Name { get; set; } public string Message { get; set; } public Sender (string _name, string _message) { Name = _name; Message = _message; } }
現(xiàn)在,我們將使用Aspose.Words的報告引擎,按照以下步驟從Sender類的模板和對象生成Word文檔。
- 創(chuàng)建Document類的對象,并使用Word模板的路徑對其進行初始化。
- 創(chuàng)建并初始化Sender類的對象。
- 創(chuàng)建ReportingEngine類的對象。
- 使用ReportingEngine.BuildReport()填充模板,該模板將Document的對象,數(shù)據(jù)源和數(shù)據(jù)源的名稱作為參數(shù)。
- 使用Document.Save()方法保存生成的Word文檔。
下面的代碼示例演示如何從C#中的模板生成Word文檔。
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");
輸出結果
從C#中的XML數(shù)據(jù)源生成Word文檔
為了從XML數(shù)據(jù)源生成Word文檔,我們將使用帶有以下占位符的更為復雜的Word模板:
<>Name: <<[Name]>>, Age: <<[Age]>>, Date of Birth: <<[Birth]:"dd.MM.yyyy">> < > Average age: <<[persons.Average(p => p.Age)]>>
下面給出了我在此示例中使用的XML數(shù)據(jù)源。
<Persons> | |
<Person> | |
<Name>John DoeName> | |
<Age>30Age> | |
<Birth>1989-04-01 4:00:00 pmBirth> | |
Person> | |
<Person> | |
<Name>Jane DoeName> | |
<Age>27Age> | |
<Birth>1992-01-31 07:00:00 amBirth> | |
Person> | |
<Person> | |
<Name>John SmithName> | |
<Age>51Age> | |
<Birth>1968-03-08 1:00:00 pmBirth> | |
Person> | |
Persons> |
以下是從XML數(shù)據(jù)源生成Word文檔的步驟:
- 創(chuàng)建Document類的實例,并使用Word模板的路徑對其進行初始化。
- 創(chuàng)建XmlDataSource類的實例,并使用XML文件的路徑對其進行初始化。
- 創(chuàng)建ReportingEngine類的實例。
- 以與之前填充Word模板相同的方式使用ReportingEngine.BuildReport()方法。
- 使用Document.Save()方法保存生成的Word文檔。
下面的代碼示例演示如何從C#中的XML數(shù)據(jù)源生成Word文檔。
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");
輸出結果
在C#中從JSON數(shù)據(jù)源生成Word文檔
現(xiàn)在,讓我們看看如何使用JSON數(shù)據(jù)源生成Word文檔。在此示例中,我們將生成按其經(jīng)理分組的客戶列表。在這種情況下,以下為Word模板:
<>Manager: <<[Name]>> Contracts: < >- <<[Client.Name]>> ($<<[Price]>>) < > <>
以下是我們將用來填充模板的JSON數(shù)據(jù)源:
[ | |
{ | |
姓名:“約翰史密斯”, | |
合同: | |
[ | |
{ | |
客戶: | |
{ | |
姓名:“一家公司” | |
}, | |
價格:1200000 | |
}, | |
{ | |
客戶: | |
{ | |
姓名:“ B有限公司” | |
}, | |
價錢:750000 | |
}, | |
{ | |
客戶: | |
{ | |
姓名:“ C&D ” | |
}, | |
價錢:350000 | |
} | |
] | |
}, | |
{ | |
姓名:“托尼安德森”, | |
合同: | |
[ | |
{ | |
客戶: | |
{ | |
名稱:“ E Corp. ” | |
}, | |
價錢:650000 | |
}, | |
{ | |
客戶: | |
{ | |
姓名:“ F&Partners ” | |
}, | |
價錢:550000 | |
} | |
] | |
}, | |
] |
以下是從XML數(shù)據(jù)源生成Word文檔的步驟:
- 創(chuàng)建Document類的實例,并使用Word模板的路徑對其進行初始化。
- 創(chuàng)建XmlDataSource類的實例,并使用XML文件的路徑對其進行初始化。
- 創(chuàng)建ReportingEngine類的實例。
- 以與之前填充Word模板相同的方式使用ReportingEngine.BuildReport()方法。
- 使用Document.Save()方法保存生成的Word文檔。
為了從JSON生成Word文檔,我們將使用JsonDataSource類加載和使用JSON數(shù)據(jù)源,其余步驟將保持不變。下面的代碼示例演示如何使用C#中的JSON從模板生成Word文檔。
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");
輸出結果
在C#中從CSV數(shù)據(jù)源生成Word文檔
為了從CSV生成Word文檔,我們將使用以下Word模板:
<>Name: <<[Column1]>>, Age: <<[Column2]>>, Date of Birth: <<[Column3]:"dd.MM.yyyy">> < > Average age: <<[persons.Average(p => p.Column2)]>>
下面給出了我在此示例中使用的XML數(shù)據(jù)源。
現(xiàn)在,讓我們來看一下C#代碼。除了一個更改,我們將使用CsvDataSource類加載CSV數(shù)據(jù),此處所有步驟都將保持不變。下面的代碼示例演示如何從CSV數(shù)據(jù)源生成Word文檔。
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");
輸出結果