Private Function GetMasterData() As DataTable
Dim dt As New DataTable
dt.Columns.Add("EMP_ID")
dt.Columns.Add("EMP_NAME")
dt.Columns.Add("DEP_NAME")
dt.Columns.Add("PFM_YEAR")
dt.Columns.Add("PFM_RANK")
dt.Columns.Add("TOTAL_AMOUNT")
dt.Rows.Add("A0001", "王大明", "財務部", "2018", "A", "30000")
dt.Rows.Add("A0002", "陳拉拉", "資訊部", "2018", "B", "2000")
Return dt
End Function
Private Function GetDetailData() As DataTable
Dim dt As New DataTable
dt.Columns.Add("EMP_ID")
dt.Columns.Add("ITEM_NAME")
dt.Columns.Add("AMOUNT")
'王大明年終獎金明細
dt.Rows.Add("A0001", "考勤獎金", "5000")
dt.Rows.Add("A0001", "春節獎金", "5000")
dt.Rows.Add("A0001", "績效獎金", "20000")
'陳拉拉年終獎金明細
dt.Rows.Add("A0002", "考勤獎金", "2000")
Return dt
End Function
Dim strTemplatePath As String = "D:\MailMergeSample.doc"
Dim strResultPath As String = "D:\MailMergeResult_{0}.doc"
Dim dtMaster As DataTable = GetMasterData()
Dim dtDetail As DataTable = GetDetailData()
Dim dtTableM As New DataTable
Dim dtTableD As New DataTable
Dim strEmpID As String
For i As Integer = 0 To dtMaster.Rows.Count - 1
dtTableM = dtMaster.Clone
dtTableD = dtDetail.Clone
strEmpID = dtMaster.Rows(i).Item("EMP_ID")
For Each dr As DataRow In dtMaster.Select(String.Format("EMP_ID='{0}'", strEmpID))
dtTableM.ImportRow(dr)
Next
For Each dr As DataRow In dtDetail.Select(String.Format("EMP_ID='{0}'", strEmpID))
dtTableD.ImportRow(dr)
Next
dtTableM.TableName = "TableM"
dtTableD.TableName = "TableD"
Dim ds As DataSet = New DataSet
ds.Tables.Add(dtTableM)
ds.Tables.Add(dtTableD)
Dim doc As New Aspose.Words.Document(strTemplatePath)
doc.MailMerge.CleanupOptions = MailMerging.MailMergeCleanupOptions.RemoveEmptyParagraphs
doc.MailMerge.ExecuteWithRegions(ds)
doc.Save(String.Format(strResultPath, strEmpID), SaveFormat.Doc)
Next