Here is the code that I use to perform the mailmerge:
Public Function GenerateLetter(ByVal ARIData As String, ByVal LetterData As System.Data.DataTable) As Document
Dim ARI() As String = ARIData.Split(";")
Dim doc As Document = New Document(ARI(0).ToString.Trim)
' Create an array of the field names
Dim fieldNames() As String = {"Name", _
"CareOf", _
"Address", _
"CityStateZip", _
"APN", _
"DocNumber", _
"RecordingDate", _
"SitusInfo", _
"UserName", _
"UserTitle"}
' Create an array of the field values
Dim fieldValues() As Object = { _
"name", _
"careof", _
"address", _
"citystatezip", _
"apn", _
"transferid", _
"transferdate", _
"situsinfo", _
"username", _
"jobtitle" _
}
'Set up the event handler for image fields and perform mail merge.
AddHandler doc.MailMerge.MergeImageField, AddressOf HandleMergeImage
'Fill the fields in the document with user data.
doc.MailMerge.Execute(fieldNames, fieldValues)
'doc.MailMerge.Execute(LetterData)
doc.MailMerge.DeleteFields()
Return doc
End Function
Here is the code I use for sending the document back to the user:
Dim aridata As String
aridata = filepath & ";" & filename & ".doc"
Dim dt As New DataTable
dt = Exemptions.PopulateLetterFields(CInt(lblSelectedExemptionVal.Text), CInt(CType(e.Item.FindControl("lblLetterID"), Label).Text), "Preview")
Dim PreviewDoc As Document
PreviewDoc = Exemptions.GenerateLetter(aridata, dt)
PreviewDoc.Save(filename & ".doc", SaveFormat.FormatDocument, SaveType.OpenInWord, Me.Response)
To generate my DataTable I use the following code based on data in a database:
Public Function PopulateLetterFields(ByVal ExemptionID As Integer, ByVal LetterID As Integer, ByVal Mode As String) As DataTable
Dim tblLetterData As DataTable
tblLetterData = New DataTable("LetterData")
Dim FieldName As DataColumn = New DataColumn("FieldName")
FieldName.DataType = System.Type.GetType("System.String")
tblLetterData.Columns.Add(FieldName)
Dim FieldData As DataColumn = New DataColumn("FieldData")
FieldData.DataType = System.Type.GetType("System.String")
tblLetterData.Columns.Add(FieldData)
Dim dsTemp As New DsExemptions
PopulateDS(dsTemp, "ExemptionLettersData", ExemptionID, 0, 0, LetterID)
PopulateDS(dsTemp, "ExemptionLetterFields", 0, 0, 0, 0)
Dim DataRow As DsExemptions.ExemptionLettersDataRow
For Each DataRow In dsTemp.ExemptionLettersData
Dim fieldRow As ExemptionFramework.DsExemptions.ExemptionLetterFieldsRow
fieldRow = dsTemp.ExemptionLetterFields.FindByFieldID(DataRow.FieldID)
Dim tmpRow As DataRow = tblLetterData.NewRow
tmpRow.Item("FieldName") = fieldRow.FieldName
Select Case Mode
Case "Preview"
Select Case fieldRow.FieldName
Case "Name"
tmpRow.Item("FieldData") = "Name"
Case "CareOf"
tmpRow.Item("FieldData") = "CareOf"
Case "Address"
tmpRow.Item("FieldData") = "Address"
Case "CityStateZip"
tmpRow.Item("FieldData") = "CityStateZip"
Case "APN"
tmpRow.Item("FieldData") = "APN"
Case "Situs"
tmpRow.Item("FieldData") = "Situs"
Case "DocNumber"
tmpRow.Item("FieldData") = "DocNumber"
Case "FinalText"
tmpRow.Item("FieldData") = "FinalText"
Case "RespondNote"
tmpRow.Item("FieldData") = "RespondNote"
Case "NoteLine1Text"
tmpRow.Item("FieldData") = "NoteLine1Text"
Case "NoteLine2Text"
tmpRow.Item("FieldData") = "NoteLIne2Text"
Case "UserName"
tmpRow.Item("FieldData") = "UserName"
Case "UserInitials"
tmpRow.Item("FieldData") = "UI"
Case Else
tmpRow.Item("FieldData") = ""
End Select
Case "Data"
End Select
tblLetterData.Rows.Add(tmpRow)
Next
Return tblLetterData
End Function
I have attached the template file that I am using.
Please let me know if you need more info.