Сгенерировать Word из шаблона на C#

Автоматическое создание документов Word широко используется предприятиями для создания множества отчетов. В некоторых случаях документы создаются с нуля. С другой стороны, предопределенные шаблоны используются для создания документов Word путем заполнения заполнителей. В этой статье я покажу, как динамически и программно генерировать документы Word из шаблонов на C#. Вы узнаете, как заполнять шаблоны Word из различных типов источников данных.

В этой статье будут рассмотрены следующие сценарии вместе с примерами кода:

C# API автоматизации Word

Мы будем использовать Aspose.Words for .NET — API автоматизации Word, который позволяет создавать документы Word с нуля или путем заполнения предопределенных шаблонов Word. Вы можете либо скачать исполняемый файл API, либо установить его одним из следующих способов.

Использование диспетчера пакетов NuGet

Использование консоли диспетчера пакетов

PM> Install-Package Aspose.Words

Создание документа Word из шаблона с использованием объектов С#

Прежде всего, давайте посмотрим, как заполнить шаблон Word с помощью объектов C#. Для этого мы создадим документ 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 для создания документа Word из шаблона и объекта класса Sender, выполнив следующие шаги.

  • Создайте объект класса Document и инициализируйте его путем к шаблону Word.
  • Создайте и инициализируйте объект класса Sender.
  • Создайте экземпляр класса ReportingEngine.
  • Заполните шаблоны с помощью ReportingEngine.BuildReport(), который принимает объект документа, источник данных и имя источника данных в качестве параметров.
  • Сохраните созданный документ Word с помощью метода Document.Save().

В следующем примере кода показано, как создать документ Word из шаблона на 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");

Выход

Создание документа Word из источника данных XML в C#

Для создания документа Word из источника данных XML мы будем использовать немного более сложный шаблон 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>

Ниже приведены шаги для создания документа Word из источника данных XML:

  • Создайте экземпляр класса Document и инициализируйте его путем к шаблону Word.
  • Создайте экземпляр класса XmlDataSource и инициализируйте его, указав путь к XML-файлу.
  • Создайте экземпляр класса ReportingEngine.
  • Используйте метод ReportingEngine.BuildReport() так же, как мы использовали ранее для заполнения шаблона Word.
  • Сохраните сгенерированный документ Word с помощью метода Document.Save().

В следующем примере кода показано, как создать документ Word из источника данных XML в 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");

Выход

Создание документа Word из источника данных JSON в C#

Давайте теперь посмотрим, как создать документ Word с использованием источника данных JSON. В этом примере мы создадим список клиентов, сгруппированных по их менеджерам. В этом случае шаблон 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
           }
       ]
   },
]

Для создания документа Word из JSON мы будем использовать класс JsonDataSource для загрузки и использования источника данных JSON, а остальные шаги останутся прежними. В следующем примере кода показано, как создать документ Word из шаблона с помощью JSON в 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");

Выход

Создание документа Word из источника данных CSV в С#

Для создания документа Word из CSV мы будем использовать следующий шаблон 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. В следующем примере кода показано, как создать документ Word из источника данных CSV.

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 для .NET бесплатно

Вы можете попробовать Aspose.Words для .NET, используя бесплатную временную лицензию.

Вывод

В этой статье вы узнали, как создавать документы Word из шаблонов с помощью C#. Кроме того, вы увидели, как использовать объекты, источники данных XML, JSON и CSV для создания документов Word. Вы можете узнать больше об API автоматизации C# Word, используя документацию. Кроме того, вы можете связаться с нами через наш форум.

Смотрите также