目標:使用Word的MailMerge功能,數據源是Excel中的數據。這些資料在網上很少,只能自己慢慢測試了。
關於Word的MailMerge功能:
Word提供郵件的模板,可以選擇各種數據源,比如數據庫,Excel等,然後群發(或打印、另存文件)郵件。
為了實現這個功能,我的程序要能做的是
1:打開Word文件對象
2:設置MailMerge數據源:指定Excel,指定查詢語句,指定聯接的列s
3:關閉保存
關於引用:
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
using System.Diagnostics;
using System.IO;
關於變量:Word的com對象需要傳入的參數定義
Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
object missing = System.Reflection.Missing.Value;
object falseValue = false;
object trueValue = true;
關於處理
需要注意的是
1:打開Word的方式
2:query的寫法。類似於sql一般,比較好玩。
3:設置列,。設置之後,在Word中可以看見這些列。
4:關閉Word之後,還得再copy一次excel。直接生成之後的Excel文件size暴漲,文件還打不開,所以覆蓋一遍了之。原因不詳。
private void button1_Click(object sender, EventArgs e)
{
object fileName = CopyTemplateDoc();//copy doc in
Word.Document doc = WordApp.Documents.Open(ref fileName, ref missing, ref falseValue, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref trueValue, ref missing, ref missing, ref missing);
object linkTo = CopyExcelData();//copy Excel data
object query = "SELECT * FROM `Sheet1$`";//data from sheet1
object header = "Name,Category,Address,Content";//filed list
try
{
doc.MailMerge.CreateDataSource(ref linkTo, ref missing, ref missing, ref header, ref falseValue, ref query, ref missing, ref missing, ref trueValue);
doc.MailMerge.FIElds.Add(WordApp.Selection.Range, "Name");//add one filed to test
MessageBox.Show("success");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
doc.Save();//save Word
CloseApp();//close Word app
CopyExcelData();//copy data again,*******************
}
}
關於關閉Word對象
public void CloseApp()
{
WordApp.Documents.Close(ref trueValue, ref missing, ref missing);
WordApp.Quit(ref trueValue, ref missing, ref missing);
System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);
GC.Collect();
//this.KillExcelProcess();
}
還有兩個工具函數不再贅述,用來copy文件並且返回文件名private string CopyExcelData();和private string CopyTemplateDoc()。