Các Loại Hoạt động Mail Merge
Ý tưởng chính của Mail Merge là tự động tạo tài liệu hoặc nhiều tài liệu dựa trên mẫu và dữ liệu được tìm nạp từ nguồn dữ liệu của bạn. Aspose.Words cho phép bạn thực hiện hai loại hoạt động Mail Merge khác nhau: đơn giản Mail Merge và Mail Merge với các vùng.
Ví dụ phổ biến nhất của việc sử dụng simple Mail Merge là khi bạn muốn gửi một tài liệu cho các khách hàng khác nhau bằng cách bao gồm tên của họ ở đầu tài liệu. Để thực hiện việc này, bạn cần tạo các trường hợp nhất như First Name và Last Name trong mẫu của mình, sau đó điền chúng vào dữ liệu từ nguồn dữ liệu của bạn. Trong khi ví dụ phổ biến nhất về việc sử dụng Mail Merge với các vùng là khi bạn muốn gửi một tài liệu bao gồm các đơn đặt hàng cụ thể với danh sách tất cả các mục trong mỗi đơn hàng. Để thực hiện việc này, bạn sẽ cần tạo các vùng hợp nhất bên trong vùng riêng của mẫu cho mỗi đơn hàng, để điền vào tất cả dữ liệu cần thiết cho các mục.
Sự khác biệt chính giữa cả hai hoạt động hợp nhất là đơn giản Mail Merge (không có vùng) lặp lại toàn bộ tài liệu trên mỗi bản ghi nguồn dữ liệu, trong khi Mail Merge với các vùng chỉ lặp lại các vùng được chỉ định trên mỗi bản ghi. Bạn có thể nghĩ về một thao tác Mail Merge đơn giản như một trường hợp cụ thể để hợp nhất với các vùng trong đó vùng duy nhất là toàn bộ tài liệu.
Thao Tác Mail Merge Đơn Giản
Một Mail Merge đơn giản được sử dụng để điền vào các trường Mail Merge bên trong mẫu của bạn với dữ liệu cần thiết từ nguồn dữ liệu của bạn (biểu diễn bảng đơn). Vì vậy, nó tương tự như cổ điển Mail Merge trong Microsoft Word.
Bạn có thể thêm một hoặc nhiều trường hợp nhất trong mẫu của mình và sau đó thực hiện thao tác Mail Merge đơn giản. Bạn nên sử dụng nó nếu mẫu của bạn không chứa bất kỳ vùng hợp nhất nào.
Hạn chế chính của việc sử dụng loại này là toàn bộ nội dung tài liệu sẽ được lặp lại cho mỗi bản ghi trong nguồn dữ liệu.
Cách Thực hiện Thao Tác Mail Merge Đơn giản
Khi mẫu của bạn đã sẵn sàng, bạn có thể bắt đầu thực hiện thao tác Mail Merge đơn giản. Aspose.Words cho phép bạn thực hiện một thao tác Mail Merge đơn giản bằng cách sử dụng Execute methods khác nhau chấp nhận các đối tượng dữ liệu khác nhau làm nguồn dữ liệu.
Ví dụ mã sau đây cho thấy cách thực hiện thao tác Mail Merge đơn giản bằng một trong các phương thức Execute:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
// Include the code for our template. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Create Merge Fields. | |
builder.InsertField(" MERGEFIELD CustomerName "); | |
builder.InsertParagraph(); | |
builder.InsertField(" MERGEFIELD Item "); | |
builder.InsertParagraph(); | |
builder.InsertField(" MERGEFIELD Quantity "); | |
// Fill the fields in the document with user data. | |
doc.MailMerge.Execute(new string[] { "CustomerName", "Item", "Quantity" }, | |
new object[] { "John Doe", "Hawaiian", "2" }); | |
doc.Save(ArtifactsDir + "BaseOperations.SimpleMailMerge.docx"); |
Bạn có thể nhận thấy sự khác biệt giữa tài liệu trước khi thực hiện đơn giản mail merge:

Và sau khi thực hiện đơn giản mail merge:

Cách Tạo Nhiều Tài Liệu Đã Hợp Nhất
Trong Aspose.Words, thao tác Mail Merge tiêu chuẩn chỉ lấp đầy một tài liệu duy nhất với nội dung từ nguồn dữ liệu của bạn. Vì vậy, bạn sẽ cần thực hiện thao tác Mail Merge nhiều lần để tạo nhiều tài liệu được hợp nhất làm đầu ra.
Ví dụ mã sau đây cho thấy cách tạo nhiều tài liệu được hợp nhất trong thao tác Mail Merge:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatabaseDir + "Northwind.accdb"; | |
Document doc = new Document(MyDir + "Mail merge destination - Northwind suppliers.docx"); | |
OleDbConnection conn = new OleDbConnection(connString); | |
conn.Open(); | |
OleDbCommand cmd = new OleDbCommand("SELECT * FROM Customers", conn); | |
OleDbDataAdapter da = new OleDbDataAdapter(cmd); | |
DataTable data = new DataTable(); | |
da.Fill(data); | |
// Perform a loop through each DataRow to iterate through the DataTable. Clone the template document | |
// instead of loading it from disk for better speed performance before the mail merge operation. | |
// You can load the template document from a file or stream but it is faster to load the document | |
// only once and then clone it in memory before each mail merge operation. | |
int counter = 1; | |
foreach (DataRow row in data.Rows) | |
{ | |
Document dstDoc = (Document) doc.Clone(true); | |
dstDoc.MailMerge.Execute(row); | |
dstDoc.Save(string.Format(ArtifactsDir + "BaseOperations.ProduceMultipleDocuments_{0}.docx", counter++)); | |
} |
Mail Merge Với Các Vùng
Bạn có thể tạo các vùng khác nhau trong mẫu của mình để có các vùng đặc biệt mà bạn có thể chỉ cần điền dữ liệu của mình. Sử dụng Mail Merge với các vùng nếu bạn muốn chèn bảng, các hàng có dữ liệu lặp lại để làm cho tài liệu của bạn tự động phát triển bằng cách chỉ định các vùng đó trong mẫu của bạn.
Bạn có thể tạo các vùng lồng nhau (con) cũng như hợp nhất các vùng. Ưu điểm chính của việc sử dụng loại này là tự động tăng các bộ phận bên trong tài liệu. Xem thêm chi tiết trong bài viết tiếp theo “Lồng Mail Merge Với Các Vùng”.
Cách Thực thi Mail Merge Với Các Vùng
Vùng Mail Merge là một phần cụ thể bên trong tài liệu có điểm bắt đầu và điểm kết thúc. Cả hai điểm được biểu diễn dưới dạng các trường Mail Merge có tên cụ thể “TableStart:XXX” và “TableEnd:XXX”. Tất cả nội dung được bao gồm trong vùng Mail Merge sẽ tự động được lặp lại cho mọi bản ghi trong nguồn dữ liệu.
Aspose.Words cho phép bạn thực thi Mail Merge với các vùng sử dụng Execute methods khác nhau chấp nhận các đối tượng dữ liệu khác nhau làm nguồn dữ liệu.
Bước đầu tiên, chúng ta cần tạo DataSet
để chuyển nó sau này dưới dạng tham số đầu vào cho phương thức ExecuteWithRegions
:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
private DataSet CreateDataSet() | |
{ | |
// Create the customers table. | |
DataTable tableCustomers = new DataTable("Customers"); | |
tableCustomers.Columns.Add("CustomerID"); | |
tableCustomers.Columns.Add("CustomerName"); | |
tableCustomers.Rows.Add(new object[] { 1, "John Doe" }); | |
tableCustomers.Rows.Add(new object[] { 2, "Jane Doe" }); | |
// Create the orders table. | |
DataTable tableOrders = new DataTable("Orders"); | |
tableOrders.Columns.Add("CustomerID"); | |
tableOrders.Columns.Add("ItemName"); | |
tableOrders.Columns.Add("Quantity"); | |
tableOrders.Rows.Add(new object[] { 1, "Hawaiian", 2 }); | |
tableOrders.Rows.Add(new object[] { 2, "Pepperoni", 1 }); | |
tableOrders.Rows.Add(new object[] { 2, "Chicago", 1 }); | |
// Add both tables to a data set. | |
DataSet dataSet = new DataSet(); | |
dataSet.Tables.Add(tableCustomers); | |
dataSet.Tables.Add(tableOrders); | |
// The "CustomerID" column, also the primary key of the customers table is the foreign key for the Orders table. | |
dataSet.Relations.Add(tableCustomers.Columns["CustomerID"], tableOrders.Columns["CustomerID"]); | |
return dataSet; | |
} |
Ví dụ mã sau đây cho thấy cách thực thi Mail Merge với các vùng bằng phương thức ExecuteWithRegions(DataSet):
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// The start point of mail merge with regions the dataset. | |
builder.InsertField(" MERGEFIELD TableStart:Customers"); | |
// Data from rows of the "CustomerName" column of the "Customers" table will go in this MERGEFIELD. | |
builder.Write("Orders for "); | |
builder.InsertField(" MERGEFIELD CustomerName"); | |
builder.Write(":"); | |
// Create column headers. | |
builder.StartTable(); | |
builder.InsertCell(); | |
builder.Write("Item"); | |
builder.InsertCell(); | |
builder.Write("Quantity"); | |
builder.EndRow(); | |
// We have a second data table called "Orders", which has a many-to-one relationship with "Customers" | |
// picking up rows with the same CustomerID value. | |
builder.InsertCell(); | |
builder.InsertField(" MERGEFIELD TableStart:Orders"); | |
builder.InsertField(" MERGEFIELD ItemName"); | |
builder.InsertCell(); | |
builder.InsertField(" MERGEFIELD Quantity"); | |
builder.InsertField(" MERGEFIELD TableEnd:Orders"); | |
builder.EndTable(); | |
// The end point of mail merge with regions. | |
builder.InsertField(" MERGEFIELD TableEnd:Customers"); | |
// Pass our dataset to perform mail merge with regions. | |
DataSet customersAndOrders = CreateDataSet(); | |
doc.MailMerge.ExecuteWithRegions(customersAndOrders); | |
doc.Save(ArtifactsDir + "BaseOperations.MailMergeWithRegions.docx"); |
Bạn có thể nhận thấy sự khác biệt giữa tài liệu trước khi thực hiện Mail Merge với các vùng:

Và sau khi thực hiện Mail Merge với các vùng:

Giới hạn của Mail Merge Với Các Khu Vực
Có một số điểm quan trọng mà bạn cần xem xét khi thực hiện Mail Merge với các vùng:
- Điểm bắt đầu TableStart:Orders và điểm kết thúc TableEnd:Orders cả hai đều cần nằm trong cùng một hàng hoặc ô. Ví dụ: nếu bạn bắt đầu một vùng hợp nhất trong một ô của bảng, bạn phải kết thúc vùng hợp nhất trong cùng một hàng với ô đầu tiên.
- Tên trường hợp nhất phải khớp với tên của cột trong DataTable của bạn. Trừ khi bạn đã chỉ định các trường được ánh xạ, Mail Merge với các vùng sẽ không thành công đối với bất kỳ trường hợp nhất nào có tên khác với tên của cột.
Nếu một trong những quy tắc này bị phá vỡ, bạn sẽ nhận được kết quả bất ngờ hoặc một ngoại lệ có thể bị ném.