Microsoft.Office.Interop.Word.Application doc = new Microsoft.Office.Interop.Word.Application();
            doc.Visible = true;
            Microsoft.Office.Interop.Word._Document document;
            object path = @"c:\word\Main.doc";
            document = doc.Documents.Open(ref path,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            document.MailMerge.OpenDataSource("c:\\word\\data.txt", ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            document.MailMerge.Execute(ref oMissing);
            document.Save();
            object False=false;
            document.Close(ref False, ref oMissing, ref oMissing);我的目的是想合并之后保存为新的文档。上面我写的代码会改变模板,这不是我想要的。这方面的知识我很缺乏,
知道的朋友能告诉我下嘛?

解决方案 »

  1.   

     Microsoft.Office.Interop.Word.Application doc = new Microsoft.Office.Interop.Word.Application(); 
                doc.Visible = true; 
                Microsoft.Office.Interop.Word._Document document; 
                object path = @"c:\word\Main.doc"; 
    object savepath = @"c:\word\Main1.doc"; 
                document = doc.Documents.Open(ref path, 
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
                document.MailMerge.OpenDataSource("c:\\word\\data.txt", ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
                document.MailMerge.Execute(ref oMissing); 
                document.SaveAs(ref path......); //后面的参数我就不写了,太多了
                object False=false; 
                document.Close(ref False, ref oMissing, ref oMissing);
                  doc.Quit(ref False, ref oMissing, ref oMissing);//最后关闭一下,别忘记
      

  2.   


    这样是另存为了一个文件,不过这个文件打开的时候会提示我选择是否打开数据源,把最后的
    //document.Close(ref False, ref oMissing, ref oMissing); 
    //doc.Quit(ref False, ref oMissing, ref oMissing);//最后关闭一下,别忘记
    这两句先屏蔽的话。会看到有个新的文档出来。里面没有域。仅仅是个普通的文档。我想保存的,就是这个文档。
    而不是模板的拷贝。用您的方法得到的是模板的拷贝。
      

  3.   

    这样的情况你要打开的事.dot文件的
    不是.doc的文档
      

  4.   

    我的Main.doc有几个邮件合并的域了。
    我是替换这些域
    你说的。dot文件是什么?
      

  5.   

    我明白你的替换域的问题,以前我也开发过
    我以前的办法就是做一个莫板也就是.dot文件
    然后里面是我替换的域。
    我读取以后,然后替换,生成新的文件。   Word.ApplicationClass WordApp = new Word.ApplicationClass();            // give any file name of your choice. 
                object fileName = "D:\\aa.dot";
                object readOnly = false;
                object isVisible = false;            //  the way to handle parameters you don't care about in .NET 
                object missing = System.Reflection.Missing.Value;
                WordApp.Visible = false;
                //   Make word visible, so you can see what's happening 
                //WordApp.Visible = true; 
                //   Open the document that was chosen by the dialog 
                Word.Document aDoc = WordApp.Documents.Open(ref fileName,
                                        ref missing, ref readOnly, ref missing,
                                        ref missing, ref missing, ref missing,
                                        ref missing, ref missing, ref missing,
                                         ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);            Word.WdStatistic stat = Word.WdStatistic.wdStatisticPages;
                int num = aDoc.ComputeStatistics(stat, ref missing);
                System.Console.WriteLine("The number of pages in doc is {0}",
                                          num);            foreach (Word.Field f in aDoc.Fields)
                {
                    string code = f.Code.Text;
                    if (code.IndexOf("replaceFile1") > -1)//域的名字
                    {
                        f.Select();
                        WordApp.Selection.TypeText("asdad");//替换                }
                }
                //foreach (Word.Range r in aDoc.Words)
                //{
                //    Debug.WriteLine("value:" + r.Text);            //}            System.Console.ReadLine();
                object o = false;
                
                aDoc.Close(ref o, ref missing, ref missing);
                WordApp.Quit(ref o, ref missing, ref missing);大约就是这个样子。saveas我就不写了,参数太多了
      

  6.   

     WordApp.Quit(ref True, ref oMissing, ref oMissing);
     把退出方法中的第一个参数用true,推出的时候就能提示让你保存合并后的文档了。
    能不能在代码中就指定一个文件名让他保存呢?
      

  7.   

    document.MailMerge.Execute(ref oMissing);
    执行完这句代码后会新建一个文档。
    我需要保存这个文档,
    怎么指定一个文件名保存?