Автоматическое создание документов Word широко используется предприятиями для создания множества отчетов. В некоторых случаях документы создаются с нуля. С другой стороны, предопределенные шаблоны используются для создания документов Word путем заполнения заполнителей. В этой статье я покажу, как динамически и программно генерировать документы Word из шаблонов на C#. Вы узнаете, как заполнять шаблоны Word из различных типов источников данных.
В этой статье будут рассмотрены следующие сценарии вместе с примерами кода:
- C# API автоматизации Word
- Создание документа Word из шаблона с использованием значений объекта C#
- Создание документа Word с использованием источника данных XML
- Создайте документ Word, используя источник данных JSON
- Создание документа Word с использованием источника данных CSV
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, используя документацию. Кроме того, вы можете связаться с нами через наш форум.