在 C# 中從模板生成 Word

Word文檔的自動生成被企業廣泛用於創建大量報告。在某些情況下,文檔是從頭開始創建的。另一方面,預定義的模板用於通過填充佔位符來生成 Word 文檔。在本文中,我將演示如何在 C# 中以編程方式動態地從模板生成 Word 文檔。您將了解如何從不同類型的數據源填充 Word 模板。

本文將介紹以下場景以及代碼示例:

C# Word 自動化 API

我們將使用 Aspose.Words for .NET - 一個 Word 自動化 API,允許您從頭開始或通過填充預定義的 Word 模板生成 Word 文檔。您可以 下載 API 的二進製文件或使用以下方法之一安裝它。

使用 NuGet 包管理器

使用包管理器控制台

PM> Install-Package Aspose.Words

使用 C# 對像從模板生成 Word 文檔

首先,讓我們看看如何使用 C# 對象填充 Word 模板。為此,我們將創建一個 Word 文檔 (DOC/DOCX),並將以下佔位符作為文檔的內容:

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

在這裡,發件人是我們將用於填充模板的以下類的對象。

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

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

現在,我們將使用 Aspose.Words 的報告引擎,按照以下步驟從模板和 Sender 類的對像生成 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 數據源生成 Word 文檔

為了從 XML 數據源生成 Word 文檔,我們將使用帶有以下佔位符的更複雜的 Word 模板:

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

下面給出了我在此示例中使用的 XML 數據源。

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

以下是從 XML 數據源生成 Word 文檔的步驟:

  • 創建 Document 類的實例並使用 Word 模板的路徑對其進行初始化。
  • 創建 XmlDataSource 類的實例並使用 XML 文件的路徑對其進行初始化。
  • 實例化 ReportingEngine 類。
  • 按照我們之前用來填充 Word 模板的相同方式使用 ReportingEngine.BuildReport() 方法。
  • 使用 Document.Save() 方法保存生成的 Word 文檔。

下面的代碼示例顯示瞭如何在 C# 中從 XML 數據源生成 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 數據源生成 Word 文檔

現在讓我們看看如何使用 JSON 數據源生成 Word 文檔。在此示例中,我們將生成按經理分組的客戶列表。在這種情況下,以下是 Word 模板:

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

以下是我們將用於填充模板的 JSON 數據源:

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

為了從 JSON 生成 Word 文檔,我們將使用 JsonDataSource 類來加載和使用 JSON 數據源,其餘步驟將保持不變。以下代碼示例顯示如何在 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 數據源生成 Word 文檔

為了從 CSV 生成 Word 文檔,我們將使用以下 Word 模板:

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

該模板將填充以下 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

現在,讓我們來看看 C# 代碼。除了我們將使用 CsvDataSource 類加載 CSV 數據這一變化外,所有步驟在這裡也將保持不變。以下代碼示例顯示如何從 CSV 數據源生成 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");

輸出

免費試用 Aspose.Words for .NET

您可以使用免費的 臨時許可證 試用 Aspose.Words for .NET。

結論

在本文中,您了解瞭如何使用 C# 從模板生成 Word 文檔。此外,您還看到瞭如何使用對象、XML、JSON 和 CSV 數據源來生成 Word 文檔。您可以使用 文檔 探索有關 C# Word 自動化 API 的更多信息。此外,您可以通過我們的 論壇 聯繫我們。

也可以看看