在 C# 中从模板生成 Word

Word 文档的自动生成被企业广泛用于创建大量报告。在某些情况下,文档是从头开始创建的。另一方面,预定义模板用于通过填充占位符来生成 Word 文档。在本文中,我将演示如何在 C# 中以动态和编程方式从模板生成 Word 文档。您将了解如何从不同类型的数据源填充 Word 模板。

本文将介绍以下场景以及代码示例:

C# 文字自动化 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 文档。

  • 创建 Document 类的对象并使用 Word 模板的路径对其进行初始化。
  • 创建并初始化 Sender 类的对象。
  • 实例化 ReportingEngine 类。
  • 使用将 Document 的对象、数据源和数据源名称作为参数的 ReportingEngine.BuildReport() 填充模板。
  • 使用 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 数据源生成 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 类。
  • 使用 ReportingEngine.BuildReport() 方法,就像我们之前用来填充 Word 模板一样。
  • 使用 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 的更多信息。此外,您可以通过我们的 论坛 与我们联系。

也可以看看