我用c#写了一个自动生成Word文档的程序,我是设计的是按下按钮就打开一个文档,往里面填充东西,然后关闭,这个过程全部是自动的,没有人工参与,可是我发现了一个问题:当我的电脑上没有运行Microsoft Office Word的一个程序实例时,我的这个程序能正常打开和关闭Word文档,但是当我的电脑上运行了Microsoft Office Word的一个程序实例时,我的程序在关闭文档这一步上出现了一个情况:文档自动关闭时会弹出对话框说
                   此文件正由另一应用程序或用户使用
                   (C:\Documents and Settings\.....\Normal.dot)
不知道这是怎么一回事,请哪位知道帮我解释一下,再说说有什么方法可以不让这个提示出来。谢谢,如果你感兴趣的话,可以到我的百度空间看看源代码
http://hi.baidu.com/%CD%E6%CA%AF%CD%B7%B5%C4%D0%A1%BA%A2/blog/item/af6d74fd7958368ab901a0c1.html
非常感激!!!

解决方案 »

  1.   

    不知道有没有人还关注这个问题,现在我已经基本越过了这个问题。
    我想原因是,Word程序运行的时候,只能开一个主程序。在非编程人员使用的时候,不会出现一个系统中同时开两个Word的情况,但是程序员用c#,或vba操作Word的时,很有可能会用一个Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();就新建了一个Word程序,这样下去如果不关掉新建的Word程序,久而久之,就会出现系统中开启了若干个Word程序的情况,这时候关闭Word就会出现问你是否要保存Word默认模版的问题,因为开一个Word时,关闭Word那关闭了就行了没说的。若是有多个Word要关闭,那么就会出现到底要不要更改Word模版的问题,因为关闭了之后,还有其他的Word程序,而所有的Word程序是通用了一个模版,所以,应该问一下使用者:当前的模版要修改吗?  这只是我的推测,不是什么答案。
    想安静的关闭Word的方法是调用一个函数:

                    doc.Close(ref Nothing, ref Nothing, ref Nothing);
                    wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
                    try
                    {
                        if (doc != null)
                        {
                            Marshal.ReleaseComObject(doc);
                            doc = null;
                        }
                        wordApp.Quit(ref Nothing, ref Nothing, ref Nothing); 
                    }
                    catch
                    {
                        try
                        {
                            if (wordApp != null)
                            {
                                Marshal.ReleaseComObject(wordApp);
                                wordApp = null;
                            }
                        }
                        catch (Exception ex1)
                        {
                            MessageBox.Show(ex1.ToString());
                        }
     
                    }
    这个方法应该就没什么问题了吧!如果哪位有兴趣尝试了一下,发现不行,请到我的百度空间给我留言,再讨论。
      

  2.   

    再补充一下,我在http://topic.csdn.net/u/20090306/16/eb94da22-b3be-4482-8e37-f05eb3029037.html
    找到了相同的问题,并且有链接到http://support.microsoft.com/kb/285885/zh-cn的解决方案,虽然是vb的,但可以看出c#的解决方案:用下面的方法
    object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
    wordApp.Quit(ref saveOption, ref Missing, ref Missing);
    而不是
    wordApp.Quit(ref Missing, ref Missing, ref Missing);
      

  3.   

    感谢:LGYXDN    正好遇到些问题,问题已解决,谢谢!
      

  4.   

    我的是把doc转化成rtf格式也是报同样的问题
    解决不了,我的没有用到你说的doc对象怎么办啊。帮帮我!
    if (File.Exists(Application.StartupPath + @"\RTF\ERP_DataSource.rtf"))
                {
                    File.Delete(Application.StartupPath + @"\RTF\ERP_DataSource.rtf");
                }
                //Word.Application newApp = new Word.Application();
                Word._Application newApp = new Word.Application();            // 指定源文件和目标文件
                object Source = Application.StartupPath + @"\word\ERP_DataSource.doc";
                object Target = Application.StartupPath + @"\RTF\ERP_DataSource.rtf";
                object Unknown = Type.Missing;
                // 打开要转换的Word文件
                newApp.Documents.Open(ref Source, ref Unknown,
                ref Unknown, ref Unknown, ref Unknown,
                ref Unknown, ref Unknown, ref Unknown,
                ref Unknown, ref Unknown, ref Unknown,
                ref Unknown);            // 指定文档的类型
                object format = Word.WdSaveFormat.wdFormatRTF;            //改变文档类型
                newApp.ActiveDocument.SaveAs(ref Target, ref format,
                ref Unknown, ref Unknown, ref Unknown,
                ref Unknown, ref Unknown, ref Unknown,
                ref Unknown, ref Unknown, ref Unknown);            //关闭word实例
                newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
                newApp = null;
      

  5.   

     object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
                    newApp.Quit(ref saveOption, ref oMissing, ref oMissing);
    这个我也试验了也不行的,还是出现对话框,问我是否保存模板。