Basit Mail Merge Operasyon
Basit bir Mail Merge doldurmak için kullanılır Mail Merge şablonunuzun içindeki veri kaynağınızdan gerekli verileri içeren alanlar (tek tablo gösterimi). Bu yüzden klasiğe benzer Mail Merge içinde Microsoft Word.
Şablonunuza bir veya daha fazla birleştirme alanı ekleyebilir ve ardından basit olanı yürütebilirsiniz Mail Merge operasyon. Şablonunuzda herhangi bir birleştirme bölgesi yoksa bunu kullanmanız önerilir.
Bu türü kullanmanın temel sınırlaması, veri kaynağındaki her kayıt için tüm belge içeriğinin tekrarlanacağıdır.
Basit Bir Şekilde Nasıl Yürütülür Mail Merge Operasyon
Şablonunuz hazır olduğunda, basit olanı gerçekleştirmeye başlayabilirsiniz Mail Merge operasyon. Aspose.Words basit bir yürütme yapmanızı sağlar Mail Merge farklı kullanarak işlem Execute çeşitli veri nesnelerini veri kaynağı olarak kabul eden yöntemler.
Aşağıdaki kod örneği, basit bir kodun nasıl çalıştırılacağını gösterir. Mail Merge aşağıdakilerden birini kullanarak işlem Execute yöntem:
// 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"); |
Basit çalıştırmadan önce belge arasındaki farkı fark edebilirsiniz mail merge:

Ve basit yürüttükten sonra mail merge:

Birden Çok Birleştirilmiş Belge Nasıl Oluşturulur
İçinde Aspose.Words, standart Mail Merge işlem, yalnızca tek bir belgeyi veri kaynağınızdaki içerikle doldurur. Yani, yürütmek için ihtiyacınız olacak Mail Merge çıktı olarak birkaç birleştirilmiş belge oluşturmak için birçok kez işlem yapın.
Aşağıdaki kod örneği, bir çalışma sırasında birleştirilmiş birkaç belgenin nasıl oluşturulacağını gösterir. Mail Merge ile çalışma 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; | |
}; |