先前的答案建议在这里这让我得出结论,我可以合并图像,但如果不控制数据源,我如何根据字段条件使图像不同?例如,如果客户是加拿大人,徽标将是一回事,如果是美国人,徽标将是另一回事。实际上存在帐户分组,母公司有不同的指定响应。我需要根据收到的数据进行条件合并。
答案1
您可以通过一个模板使用条件 IF 字段来实现此目的。
例如,如果您只有两个可能的选项,您可以使用这个:
{ IF {MERGEFIELD Country} = "USA" "(The USA image)" "(The Canadian image)" }
但是,如果您有两个以上的选择,则更适合这样做:
{ IF {MERGEFIELD Country} = "USA" "(The USA image)" "" }
{ IF {MERGEFIELD Country} = "Canada" "(The Canada image)" "" }
{ IF {MERGEFIELD Country} = "UK" "(The UK image)" "" }
您希望这三张图像在同一行并排显示。如果国家代码与合并后的图像不匹配,则图像将被隐藏,只显示匹配的图像。
答案2
我所做的是为每个组制作不同的模板。例如,一个模板适用于加拿大。另一个适用于美国。(将加拿大模板复制为美国模板,并将加拿大的徽标更改为美国的徽标)
以下是我为我的项目编写的代码。如果Student
是三年级,则显示三年级模板。如果他们是四年级学生,则显示四年级模板。在我的数据中,我有一列说明需要哪个模板。
样本数据
StudentID Grade Template ....
--------- ----- ----------
3424 3 3rd.docx
4424 4 4th.docx
3198 3 3rd.docx
VBA 代码:
Public Sub Print_Student_Report_by_St_ID(StudentID_in As Long, _
Optional TemplateName_in As String, _
Optional TemplatePath_in As String, _
Optional DisplayWord_in As Boolean)
On Error GoTo ErrorHandler
Dim this_path As String
Dim this_db As String
Dim strTemplateFileName As String
Dim strTemplatePath As String
'Folder Location
this_path = Application.CurrentProject.Path & "\"
this_db = this_path & Application.CurrentProject.Name
'Find Template
strTemplatePath = TemplatePath_in
strTemplateFileName = TemplateName_in
'Convert St_ID to SQL Statement
Dim ssql As String
ssql = SELECT_SOMETHING
Dim word_app As Word.Application
Set word_app = CreateObject("Word.Application")
If DisplayWord_in Then
word_app.Visible = True
Else
word_app.Visible = False
End If
Dim word_doc As Word.Document
Set word_doc = word_app.Documents.Open(TemplatePath_in & strTemplateFileName)
If word_doc.MailMerge.State <> wdMainAndDataSource Then
With word_doc.MailMerge
'Add UserName and Password to prevent it ask password everytime if not user windows logon password
Dim strConnection As String
strConnection = "Provider=SQLOLEDB.1;Initial Catalog=database_name;" _
& "Data Source=domain.com;" _
& "UID=user;PWD=password;"
.OpenDataSource _
Name:=this_db, _
ReadOnly:=True, LinkToSource:=True, _
SQLstatement:=ssql, Connection:=strConnection
.Destination = wdSendToPrinter
.Execute
End With
End If
Exit_Sub:
word_doc.Close SaveChanges:=wdDoNotSaveChanges
word_app.Quit wdDoNotSaveChanges
Set word_doc = Nothing
Set word_app = Nothing
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 0
Case Else
'Show Some Error
End Select
Resume Exit_Sub
Resume
End Sub
但缺点是如果你有太多的组,你可能需要一堆模板,这很难维护。