首页 > 开发 > 综合 > 正文

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

2024-07-21 02:30:18
字体:
来源:转载
供稿:网友

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



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表