Operație Simplă Mail Merge
Un simplu Mail Merge este folosit pentru a umple câmpurile Mail Merge din șablonul dvs. cu datele necesare din sursa de date (reprezentarea unui singur tabel). Deci este similar cu clasicul Mail Merge din Microsoft Word.
Puteți adăuga unul sau mai multe câmpuri de îmbinare în șablonul dvs. și apoi executați operația simplă mail merge. Este recomandat să îl utilizați dacă șablonul dvs. nu conține regiuni de îmbinare.
Principala limitare a utilizării acestui tip este că întregul conținut al documentului va fi repetat pentru fiecare înregistrare din sursa de date.
Cum se execută o operație simplă Mail Merge
Odată ce șablonul este gata, puteți începe să efectuați operația simplă mail merge. Aspose.Words vă permite să executați o operație simplă Mail Merge folosind diferite metode Execute care acceptă diverse obiecte de date ca sursă de date.
Următorul exemplu de cod arată cum să executați o operație simplă Mail Merge folosind una dintre metodele 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"); |
Puteți observa diferența dintre document înainte de a executa simplu mail merge:

Și după executarea simplă mail merge:

Cum se creează mai multe documente îmbinate
În Aspose.Words, operația standard Mail Merge umple doar un singur document cu conținut din sursa de date. Deci, va trebui să executați operația Mail Merge de mai multe ori pentru a crea câteva documente îmbinate ca ieșire.
Următorul exemplu de cod arată cum să generați câteva documente îmbinate în timpul unei operații Mail Merge cu 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; | |
}; |