Opération simple Mail Merge
Un simple Mail Merge est utilisé pour remplir les champs Mail Merge à l’intérieur de votre modèle avec les données requises de votre source de données (représentation de table unique). C’est donc similaire au classique Mail Merge dans Microsoft Word.
Vous pouvez ajouter un ou plusieurs champs de fusion dans votre modèle, puis exécuter l’opération simple mail merge. Il est recommandé de l’utiliser si votre modèle ne contient aucune région de fusion.
La principale limitation de l’utilisation de ce type est que l’ensemble du contenu du document sera répété pour chaque enregistrement de la source de données.
Comment exécuter une opération simple Mail Merge
Une fois que votre modèle est prêt, vous pouvez commencer à effectuer l’opération simple mail merge. Aspose.Words vous permet d’exécuter une opération Mail Merge simple en utilisant différentes méthodes Execute qui acceptent divers objets de données comme source de données.
L’exemple de code suivant montre comment exécuter une opération Mail Merge simple en utilisant l’une des méthodes 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"); |
Vous pouvez remarquer la différence entre le document avant d’exécuter simple mail merge:

Et après avoir exécuté le simple mail merge:

Comment Créer Plusieurs Documents Fusionnés
Dans Aspose.Words, l’opération standard Mail Merge ne remplit qu’un seul document avec le contenu de votre source de données. Ainsi, vous devrez exécuter l’opération Mail Merge plusieurs fois pour créer quelques documents fusionnés en sortie.
L’exemple de code suivant montre comment générer quelques documents fusionnés lors d’une opération Mail Merge avec 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; | |
}; |