단순 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:

simple_mail_merge_template-aspose-words-cpp

그리고 간단한 실행 후 mail merge:

execute_simple_mail_merge-aspose-words-cpp

병합된 문서를 여러 개 만드는 방법

그 안에 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;
};