Operasi Mail Merge Sederhana

Mail merge sederhana digunakan untuk mengisi kolom Mail Merge di dalam templat Anda dengan data yang diperlukan dari sumber data Anda (representasi tabel tunggal). Jadi ini mirip dengan Mail Merge klasik di Microsoft Word.

Anda dapat menambahkan satu atau lebih bidang gabungan di templat Anda, lalu menjalankan operasi Mail Merge sederhana. Disarankan untuk menggunakannya jika templat Anda tidak berisi wilayah gabungan apa pun.

Batasan utama penggunaan tipe ini adalah seluruh konten dokumen akan diulang untuk setiap catatan di sumber data.

Cara Menjalankan Operasi Mail Merge Sederhana

Setelah templat Anda siap, Anda dapat mulai melakukan operasi Mail Merge sederhana. Aspose.Words memungkinkan Anda menjalankan operasi Mail Merge sederhana menggunakan metode Execute berbeda yang menerima berbagai objek data sebagai sumber data.

Contoh kode berikut menunjukkan cara menjalankan operasi Mail Merge sederhana menggunakan salah satu metode 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");

Anda dapat melihat perbedaan antara dokumen sebelum menjalankan mail mergesederhana:

simple_mail_merge_template-aspose-words-cpp

Dan setelah mengeksekusi mail mergesederhana:

execute_simple_mail_merge-aspose-words-cpp

Cara Membuat Beberapa Dokumen Gabungan

Dalam Aspose.Words, operasi Mail Merge standar hanya mengisi satu dokumen dengan konten dari sumber data Anda. Jadi, Anda perlu menjalankan operasi Mail Merge berkali-kali untuk membuat beberapa dokumen gabungan sebagai keluaran.

Contoh kode berikut menunjukkan cara membuat beberapa dokumen gabungan selama operasi Mail Merge dengan 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;
};