C# Microsoft.Office.Interop.Word.Document赢得';t提示保存对单个文档的更改而不使用_Application.Quit()

C# Microsoft.Office.Interop.Word.Document赢得';t提示保存对单个文档的更改而不使用_Application.Quit(),c#,dialog,ms-word,office-interop,C#,Dialog,Ms Word,Office Interop,在我开始之前,我已经在谷歌上搜索到了这个问题,并且有很多关于如何防止保存提示的帖子。我在显示保存提示时遇到问题 我正在用C#构建文档生成系统的模板编辑部分。系统将编辑“dot”和“dotx”文件。在概述问题之前,我用于开发的环境是运行VisualStudio2010和Word 2010。它最终将在其他版本上运行,但我想先让这些版本起作用 为了设置场景,我打开了一个表单,其中有一个从存储过程(数据源)返回的列列表,可以作为书签添加到文档中。我有所有的书签和拖放操作功能。关闭应用程序时,捕获“App

在我开始之前,我已经在谷歌上搜索到了这个问题,并且有很多关于如何防止保存提示的帖子。我在显示保存提示时遇到问题

我正在用C#构建文档生成系统的模板编辑部分。系统将编辑“dot”和“dotx”文件。在概述问题之前,我用于开发的环境是运行VisualStudio2010和Word 2010。它最终将在其他版本上运行,但我想先让这些版本起作用

为了设置场景,我打开了一个表单,其中有一个从存储过程(数据源)返回的列列表,可以作为书签添加到文档中。我有所有的书签和拖放操作功能。关闭应用程序时,捕获“ApplicationEvents4\u DocumentBeforeCloseEventHandler”事件以关闭表单

当我关闭表格时,我会检查有多少文件是打开的。如果只有一个文档打开,我会关闭应用程序,提示用户保存更改。但是,如果有多个文档打开(大多数人同时打开多个不同的word文档),我会找到正确的文档并关闭它,并设置标志以提示用户保存更改

这就是问题所在。此时,“保存更改”对话框永远不会显示,Visual Studio中的所有内容都会冻结。如果我在VisualStudio2010上停止调试,该文档将在任务栏中无限期地闪烁,如果您关注它,它将消失并保存更改,而不会出现提示

这是处理表单关闭事件的代码:

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (app != null)
        {
            if (app.Documents.Count < 2)
            {
                this.TopMost = false;
                ((Word._Application)app).Quit();
                app = null;
            }
            else
            {
                foreach (Word.Document document in app.Documents)
                {
                    if (document.FullName.Equals(wordDoc.FullName))
                    {
                        object saveChanges = Word.WdSaveOptions.wdPromptToSaveChanges;
                        ((Word._Document)wordDoc).Close(ref saveChanges);
                        break;
                    }
                }
            }
        }
    }
我试过调试它,但运气不太好。在此行和

break;
第行允许程序在“关闭”行停止,但当您“前进”或“继续”字没有响应时,窗体和下一行上的断点也不会被命中


任何帮助都将不胜感激,因为这样简单的东西太烦人了。要避免提示或获得提示,您必须将
Saved
属性分别设置为true或false:

var doco = WordApp.Documents.Add();
doco.Saved = true;
doco.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, Type.Missing, Type.Missing);
当您试图关闭文档时,如果Word挂在代码行上,则会出现可疑的情况。我建议妥善处理所有资源。下面是一篇关于使用VSTO Contrib的精彩文章,有助于提供此功能:

更新:

通过在系统环境变量上添加以下内容来启用VSTO日志文件:

名称:VSTO_日志警报 价值:1 可能存在异常错误,这就是外接程序未加载的原因

您可以查看此源以了解有关VSTO日志记录和警报的更多信息,但实际上,您需要根据需要更改两个环境变量值:

显示VSTO警报提示

要在消息框中显示每个错误,请设置 VSTO_SUPPRESSDISPLAYALERTS变量为0(零)。您可以抑制 通过将变量设置为1(一)来发送消息

将VSTO警报记录到日志文件中

要将错误写入日志文件,请将VSTO_LOGALERTS变量设置为 1(一)


Visual Studio Tools for Office在包含应用程序清单的文件夹中创建日志文件。默认名称为.manifest.log。要停止记录错误,请将变量设置为0(零)。

Jeremy感谢您的输入。关于清理的观点很好。仍然是原型,但我的代码有点混乱,需要适当的清理和错误处理等。很抱歉按enter键,它不允许我编辑我的评论。如此继续下去。它在名单上。然而,你的提示并没有解决这个问题。它仍然挂在同一个地方,我刚刚检查了系统监视器,在糟糕的清理会产生这个结果之前,我还有很多空间。您能想到我可能有此问题的任何其他原因吗?请查看我的更新以进一步排除故障,如果发现任何问题,请告诉我。除此之外,请在另一台电脑上试用,如果可以,请在有问题的电脑上重新安装Office。如果所有操作都失败,请重新安装电脑。
var doco = WordApp.Documents.Add();
doco.Saved = true;
doco.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, Type.Missing, Type.Missing);