Einfache Mail Merge-Operation

Ein einfaches Mail Merge wird verwendet, um die Mail Merge -Felder in Ihrer Vorlage mit den erforderlichen Daten aus Ihrer Datenquelle zu füllen (Einzeltabellendarstellung). Es ähnelt also dem klassischen Mail Merge in Microsoft Word.

Sie können Ihrer Vorlage ein oder mehrere Seriendruckfelder hinzufügen und dann die einfache Operation Mail Merge ausführen. Es wird empfohlen, es zu verwenden, wenn Ihre Vorlage keine Zusammenführungsbereiche enthält.

Die Haupteinschränkung bei der Verwendung dieses Typs besteht darin, dass der gesamte Dokumentinhalt für jeden Datensatz in der Datenquelle wiederholt wird.

So führen Sie eine einfache Mail Merge -Operation aus

Sobald Ihre Vorlage fertig ist, können Sie mit der einfachen Operation Mail Merge beginnen. Mit Aspose.Words können Sie eine einfache Mail Merge -Operation mit verschiedenen Execute-Methoden ausführen, die verschiedene Datenobjekte als Datenquelle akzeptieren.

Das folgende Codebeispiel zeigt, wie eine einfache Mail Merge -Operation mit einer der Execute-Methoden ausgeführt wird:

// 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");

Sie können den Unterschied zwischen dem Dokument feststellen, bevor Sie einfach Mail Merge ausführen:

simple_mail_merge_template-aspose-words-cpp

Und nach dem Ausführen von einfachem mail merge:

execute_simple_mail_merge-aspose-words-cpp

So erstellen Sie mehrere zusammengeführte Dokumente

In Aspose.Words füllt der Standardoperation Mail Merge nur ein einzelnes Dokument mit Inhalten aus Ihrer Datenquelle. Sie müssen also die Operation Mail Merge viele Male ausführen, um einige zusammengeführte Dokumente als Ausgabe zu erstellen.

Das folgende Codebeispiel zeigt, wie einige zusammengeführte Dokumente während einer Mail Merge -Operation mit generiert werden 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;
};