Microsoft.Office.Interop.Word.Document won't提示保存更改到单个文档,

本文关键字:保存更改 提示 单个 文档 Interop Office Word Document won Microsoft | 更新日期: 2023-09-27 18:13:19

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

我正在用c#构建文档生成系统的模板编辑部分。系统将编辑"。"answers"dotx"文件。在概述问题之前,我使用的开发环境是运行Visual Studio 2010和Word 2010。它最终会在其他版本上运行,但我想先得到这些版本的功能。

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

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

这就是问题发生的地方。此时,保存更改对话框永远不会显示,并且在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;

line允许程序在'Close'行停止,但是当您'step'前进或'continue'单词变得无响应时,窗体和下一行的断点也永远不会被击中。

任何帮助将是非常感激的,因为这么简单的东西是如此恼人的卡住。

Microsoft.Office.Interop.Word.Document won't提示保存更改到单个文档,

要避免提示或获得提示,您必须分别将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日志文件:

名字:VSTO_LOGALERTS值:1可能有一个异常错误导致您的加载项没有加载。

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

显示VSTO警报提示

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

记录VSTO警报到日志文件

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

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