Microsoft.Office.Interop.Word.Document不会提示将更改保存到单个

2019-09-27 05:31发布

在我开始之前,我用Google搜索这个死刑,并有关于如何防止保存提示的许多职位。 我有显示保存提示的问题。

我在C#中建立文件生成系统的模板编辑部分。 该系统将编辑“点”和“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;

行允许程序停止在“关闭”行,但是当你“步”正向或“继续”二字变得反应迟钝,所以做表格,就非常下一行断点从来没有被击中。

任何帮助将不胜感激的东西这个简单的是如此恼人卡住上。

Answer 1:

为了避免或提示你必须设置以获取提示Saved分别财产为true或false:

var doco = WordApp.Documents.Add();
doco.Saved = true;
doco.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, Type.Missing, Type.Missing);

当您尝试关闭文档有鬼是怎么回事,如果字上的代码行挂起。 我建议恰当地配置所有资源。 下面是使用VSTO的Contrib一个伟大的文章,可以帮助提供此功能:

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

更新:

通过将您的系统环境变量以下启用VSTO日志文件:

名称:VSTO_LOGALERTS值:1有可能是一个例外错误,这就是为什么你的加载项不加载。

您可以检查此源上VSTO日志和警报的详细信息,但在本质上你改变取决于你需要做的两个环境变量的值:

显示VSTO警报提示

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

登录VSTO警报日志文件

写错误日志文件中,VSTO_LOGALERTS变量设置为1(一)。

Visual Studio工具办公室创建一个包含应用程序清单文件夹中的日志文件。 默认名称为.manifest.log。 要停止记录错误,变量设置为0(零)。



文章来源: Microsoft.Office.Interop.Word.Document won't prompt to save changes to single document without _Application.Quit()