Просте управління Mail Merge
Просте значення Mail Merge використовується для заповнення полів Mail Merge всередині вашого шаблону необхідними даними з вашого джерела даних (подання як одна таблиця). Таким чином, воно аналогічно класичному значенню Mail Merge в Microsoft Word.
Ви можете додати одне або кілька полів для об’єднання у свій шаблон, а потім виконати просту операцію Mail Merge. Рекомендується використовувати її, якщо у вашому шаблоні немає областей для об’єднання.
Основним обмеженням використання цього типу є те, що весь вміст документа буде повторюватися для кожного запису у джерелі даних.
Як виконати просту операцію Mail Merge
Як тільки ваш шаблон буде готовий, ви можете приступити до виконання простої операції Mail Merge. Aspose.Words дозволяє виконати просту операцію Mail Merge, використовуючи різні методи Execute, які приймають різні об’єкти даних як джерело даних.
Наступний приклад коду показує, як виконати просту операцію Mail Merge, використовуючи один із методів Execute:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git. | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
builder->InsertField(u" MERGEFIELD CustomerName "); | |
builder->InsertParagraph(); | |
builder->InsertField(u" MERGEFIELD Item "); | |
builder->InsertParagraph(); | |
builder->InsertField(u" MERGEFIELD Quantity "); | |
auto boxHelper = [](const char16_t* value) { return System::ObjectExt::Box<String>(value); }; | |
// Fill the fields in the document with user data. | |
doc->get_MailMerge()->Execute( | |
MakeArray<String>({u"CustomerName", u"Item", u"Quantity"}), | |
MakeArray<SharedPtr<System::Object>>( | |
{ boxHelper(u"John Doe"), boxHelper(u"Hawaiian"), boxHelper(u"2")})); | |
doc->Save(ArtifactsDir + u"BaseOperations.SimpleMailMerge.docx"); |
Ви можете помітити різницю між документами перед виконанням простого mail merge:

І після виконання простого mail merge:

Як створити кілька об’єднаних документів
У випадку Aspose.Words стандартна операція Mail Merge заповнює вмістом з вашого джерела даних лише один документ. Таким чином, вам потрібно буде виконати операцію Mail Merge Багато разів, щоб створити кілька об’єднаних документів як вихід.
Наступний приклад коду показує, як генерувати кілька об’єднаних документів під час операції Mail Merge з SQLiteCpp:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git. | |
void MultipleDocumentsMailMerge() | |
{ | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
builder->InsertField(u" MERGEFIELD FullName "); | |
builder->InsertParagraph(); | |
builder->InsertField(u" MERGEFIELD Address "); | |
// Fill the fields in the document with user data. | |
SQLite::Database database{ (std::string)(DatabaseDir + u"customers.db3") }; | |
SQLite::Statement query{ database, "SELECT * FROM Customers" }; | |
auto dataSource = MakeObject<CustomersRowMailMergeDataSource>(query); | |
int32_t counter = 1; | |
while (query.executeStep()) | |
{ | |
dataSource->Reset(); | |
doc->get_MailMerge()->Execute(dataSource); | |
doc->Save(ArtifactsDir + u"BaseOperations.MultipleDocumentsMailMerge_" + counter++ + u".docx"); | |
} | |
} | |
class CustomersRowMailMergeDataSource : public MailMerging::IMailMergeDataSource | |
{ | |
public: | |
CustomersRowMailMergeDataSource(SQLite::Statement& query) : mQuery(query) {} | |
String get_TableName() override | |
{ | |
return u"Customers"; | |
} | |
bool GetValue(String fieldName, SharedPtr<Object>& fieldValue) override | |
{ | |
auto boxHelper = [](const std::string& value) { return System::ObjectExt::Box<String>(String::FromUtf8(value)); }; | |
if (fieldName == u"FullName") | |
{ | |
fieldValue = boxHelper(mQuery.getColumn(1).getString()); | |
return true; | |
} | |
if (fieldName == u"Address") | |
{ | |
fieldValue = boxHelper(mQuery.getColumn(2).getString()); | |
return true; | |
} | |
fieldValue.reset(); | |
return false; | |
} | |
bool MoveNext() override | |
{ | |
if (!isInitialized) | |
{ | |
isInitialized = true; | |
return true; | |
} | |
return false; | |
} | |
SharedPtr<IMailMergeDataSource> GetChildDataSource(String tableName) override | |
{ | |
return nullptr; | |
} | |
void Reset() | |
{ | |
isInitialized = false; | |
} | |
private: | |
SQLite::Statement& mQuery; | |
bool isInitialized = false; | |
}; |