c#实现Word联接Excel的MailMerge功能

来源:互联网 发布:淘宝店图标在线制作 编辑:程序博客网 时间:2024/04/29 17:46
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
.Ylo170{display:none;}

目标:使用WordMailMerge功能,数据源是Excel中的数据。这些资料在网上很少,只能自己慢慢测试了。

关于WordMailMerge功能

Word提供邮件的模板,可以选择各种数据源,比如数据库,Excel等,然后群发(或打印、另存文件)邮件。

 

为了实现这个功能,我的程序要能做的是

1:打开Word文件对象

2:设置MailMerge数据源:指定Excel,指定查询语句,指定联接的列s

3:关闭保存

 

关于引用:

usingWord=Microsoft.Office.Interop.Word;

usingSystem.Reflection;

usingSystem.Diagnostics;

usingSystem.IO;

关于变量:Word的com对象需要传入的参数定义

       Word.ApplicationWordApp=newMicrosoft.Office.Interop.Word.Application();

       objectmissing=System.Reflection.Missing.Value;

       objectfalseValue=false;

       objecttrueValue=true;

关于处理

 需要注意的是

 1:打开Word的方式

 2:query的写法。类似于sql一般,比较好玩。

 3:设置列,。设置之后,在Word中可以看见这些列。

 4:关闭Word之后,还得再copy一次Excel。直接生成之后的Excel文件size暴涨,文件还打不开,所以覆盖一遍了之。原因不详。

  privatevoidbutton1_Click(objectsender,EventArgse)

       {

           objectfileName=CopyTemplateDoc();//copydocin

           Word.Documentdoc=WordApp.Documents.Open(reffileName,refmissing,reffalseValue,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,refmissing,reftrueValue,refmissing,refmissing,refmissing);

           objectlinkTo=CopyExcelData();//copyExceldata

           objectquery="SELECT*FROM`Sheet1$`";//datafromsheet1

           objectheader="Name,Category,Address,Content";//filedlist

           try

           {

               doc.MailMerge.CreateDataSource(reflinkTo,refmissing,refmissing,refheader,reffalseValue,refquery,refmissing,refmissing,reftrueValue);

               doc.MailMerge.Fields.Add(WordApp.Selection.Range,"Name");//addonefiledtotest

               MessageBox.Show("success");

           }

           catch(Exceptionex)

           {

               MessageBox.Show(ex.Message);

           }

           finally

           {

               doc.Save();//saveWord

               CloseApp();//closeWordapp

               CopyExcelData();//copydataagain,*******************

           }

       }

关于关闭Word对象

        publicvoidCloseApp()
       {
           WordApp.Documents.Close(reftrueValue,refmissing,refmissing);
           WordApp.Quit(reftrueValue,refmissing,refmissing);
           System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);
           GC.Collect();

           //this.KillExcelProcess();
       }

还有两个工具函数不再赘述,用来copy文件并且返回文件名privatestringCopyExcelData();和privatestringCopyTemplateDoc()。

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击