단순 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; | |
}; |