Mail Merge - это функция, которая позволяет легко создавать документы, заполненные данными, используя шаблон.
Чтобы продемонстрировать, как работает функция Mail Merge писем, давайте создадим приложение WinForms на C#, которое позволяет вводить данные и генерирует "car rental contract" и "insurance policy", заполненные этими данными.
Таким образом, в нашем приложении будет форма для ввода данных: RenterName, OwnerName, Date и т.д.
Кроме того,
мы подготовим два шаблона "car-rental-template.docx" и "insurance-template.docx". Приложение будет
заполнять шаблоны данными и генерировать готовые документы в формате PDF.
Преимущество этого подхода заключается в том, что вы вводите данные только один раз и получаете множество различных заполненных документов.
На этом этапе мы должны создать два шаблона.
Добавьте заголовки "Car Rental Contacts" и "Insurance Policy", соответствующие документу.
В разделе "Car Rental Contacts" добавьте поля для объединения и назовите их следующим
образом:
Day,
Month, Year, RenterName, RenterAddress, RenterPhone, CarModel, CarVIN,
CarMilleage
и Period.
В "Страховой полис" добавьте объединяемые поля и назовите их так:
Day,
Month, Year, RenterName, RenterPhone, CarModel
и Period.
Если вы уже знакомы с добавлением Merge Fields, вы можете пропустить этот шаг и использовать полностью готовые шаблоны «car-rental-template.docx» и «insurance-template.docx»
Если вы новичок в этой теме и вам нужна помощь, посмотрите, как это сделать. Вставить Merge Fields
В результате мы получаем: «car-rental-template.docx» и «insurance-template.docx»:
Вы можете добавить ссылку на SautinSoft.Document сборка двумя способами:
1. Nuget (быстрый способ):
2. Старый добрый способ, добавив ссылку:
Примечание:
SautinSoft.Document.dll скомпилированный для .NET Core находится внутри(document_net.zip->SautinSoft.Document X.X\Bin\.NET Core X.X) папки.
SautinSoft.Document.dll скомпилирован для .NET Framework находится внутри (document_net.zip->SautinSoft.Document X.X\Bin\.NET Framework X.X) папки.
Здесь вы можете найти готовыеCarRental App
Вот полный код нашего приложения CarRental:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Globalization;
using SautinSoft.Document;
namespace CarRental
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboFormat.SelectedIndex = 0;
// Some Bonus, autocomplite date
// Year
tbYear.Text = DateTime.Now.Year.ToString();
// Month
CultureInfo ci = new CultureInfo("en-US");
tbMonth.Text = ci.DateTimeFormat.GetMonthName(DateTime.Now.Month);
// Day
tbDay.Text = DateTime.Now.Day.ToString();
}
private void btnRun_Click(object sender, EventArgs e)
{
// Templates <Template Name, Path to a template file>.
Dictionary<string, string> templateCollection = new Dictionary<string, string>();
if (chkCarContract.Checked)
templateCollection.Add("CarRentalContract", @"d:\car-rental-template.docx");
if (chkInsurance.Checked)
templateCollection.Add("InsurancePolicy", @"d:\insurance-template.docx");
// Create dataSource
var dataSource = new
{
RenterName = tbRenterName.Text,
RenterAddress = tbRenterAddress.Text,
RenterPhone = tbRenterPhone.Text,
CarModel = tbCarModel.Text,
CarVIN = tbCarVIN.Text,
CarMileage = tbCarMileage.Text,
Period = tbPeriod.Text,
Day = tbDay.Text,
Month = tbMonth.Text,
Year = tbYear.Text
};
foreach (KeyValuePair<string, string> template in templateCollection)
{
// template.Value - contains a path to template file.
// For example, "d:\car-rental-template.docx"
DocumentCore dc = DocumentCore.Load(template.Value);
// Do Mail Merge
// Import data to the template.
dc.MailMerge.Execute(dataSource);
// Save the ready document
// Specify extension for the ready document
string ext = comboFormat.Text;
// template.Key - contains a name of our ready document
// For example, if RenterName is "John", as result we get: "CarRentalContract-John.pdf".
string readyDocPath = String.Format("{0}-{1}.{2}", template.Key, dataSource.RenterName, ext);
// The file format is detected automatically from the file extension.
dc.Save(readyDocPath);
// Open the ready document for demonstration purposes.
System.Diagnostics.Process.Start(readyDocPath);
}
}
}
}
Допустим, у Homer Simpson снова сломалась машина, и ему нужно взять ее напрокат. Запустив приложение с такими данными, вы получите аналогичные результаты:
В результате мы получаем: «CarRentalContract-Homer Simpson.pdf» and «InsurancePolicy-Homer Simpson.pdf»:
Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.com или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже: