没有_Application.Quit(),Microsoft.Office.Interop.Word.Document将不会提示将更改保存到单个文档

时间:2013-05-14 02:43:07

标签: c# dialog ms-word office-interop

在我开始之前,我已经用Google搜索了这篇文章,并且有许多关于如何阻止保存提示的帖子。我有一个显示保存提示的问题。

我正在用C#构建文档生成系统的模板编辑部分。系统将编辑'dot'和'dotx'文件。在概述问题之前,我用于开发的环境正在运行Visual Studio 2010和Word 2010.它最终将在其他版本上运行,但我希望首先使这些版本正常运行。

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

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

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

这是处理表单结束事件的代码:

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;
                    }
                }
            }
        }
    }

问题是此行应显示保存更改对话框:

((Word._Document)wordDoc).Close(ref saveChanges);

我试过调试这个没有太多运气。在此行和

上设置断点
break;

行允许程序在“关闭”行停止但是当你“向前”或“继续”时,单词变得没有响应,表单和下一行的断点也不会被击中。

任何帮助都会非常感激,因为这个简单的东西很难被卡住。

1 个答案:

答案 0 :(得分:3)

要避免提示或获取提示,您必须分别将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的好文章,它有助于提供此功能:

http://jake.ginnivan.net/vsto-com-interop

<强>更新

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

NAME:VSTO_LOGALERTS 价值:1 可能存在异常错误,这就是加载项未加载的原因。

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

显示VSTO警报提示

  

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

将VSTO警报记录到日志文件

  

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

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