程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c# 實現Word聯接Excel的MailMerge功能

c# 實現Word聯接Excel的MailMerge功能

編輯:關於C語言

目標:使用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()。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved