ง่าย Mail Merge การดำเนินงาน
ง่าย Mail Merge จะใช้ในการกรอกข้อมูล Mail Merge ฟิลด์ภายในเทมเพลตของคุณพร้อมข้อมูลที่จำเป็นจากแหล่งข้อมูลของคุณ(การแสดงตารางเ ดังนั้นจึงมีความคล้ายคลึงกับคลาสสิก Mail Merge ใน Microsoft Word.
คุณสามารถเพิ่มฟิลด์ผสานอย่างน้อยหนึ่งฟิลด์ในแม่แบบของคุณและดำเนินการอย่างง่าย Mail Merge การดำเนินงาน ขอแนะนำให้ใช้หากเทมเพลทของคุณไม่มีพื้นที่ผสาน.
ข้อจำกัดหลักของการใช้ชนิดนี้เป็นเนื้อหาเอกสารทั้งหมดจะถูกทำซ้ำสำหรับแต่ละระเบียน.
วิธีการดำเนินการที่เรียบง่าย Mail Merge การดำเนินงาน
เมื่อแม่แบบของคุณพร้อม,คุณสามารถเริ่มต้นการดำเนินการที่เรียบง่าย Mail Merge การดำเนินงาน Aspose.Words ช่วยให้คุณสามารถดำเนินการง่าย Mail Merge การดำเนินงานโดยใช้ที่แตกต่างกัน Execute วิธีการที่ยอมรับวัตถุข้อมูลต่างๆเป็นแหล่งข้อมูล.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการดำเนินการอย่างง่าย Mail Merge การดำเนินงานโดยใช้หนึ่งใน 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"); |
คุณสามารถสังเกตเห็นความแตกต่างระหว่างเอกสารก่อนที่จะดำเนินการอย่างง่าย mail merge:

และหลังจากที่ดำเนินการง่าย mail merge:

วิธีการสร้างเอกสารที่ผสาน
ใน Aspose.Words,มาตรฐาน Mail Merge การดำเนินการเติมเพียงเอกสารเดียวที่มีเนื้อหาจากแหล่งข้อมูลของคุณ ดังนั้นคุณจะต้องดำเนินการ Mail Merge การดำเนินการหลายครั้งเพื่อสร้างเอกสารที่ผสานไม่กี่เป็นเอาท์พุท.
ตัวอย่างรหัสต่อไปนี้แสดงวิธีการสร้างเอกสารที่ผสานไม่กี่ในระหว่าง Mail Merge การดำเนินงานด้วย 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; | |
}; |