在 Word 加载项中设置 ReadingLayout 在 Word 2013 中的工作方式与在 Word 2016 中不同

Setting ReadingLayout in Word Add-In works differently in Word 2013 than in Word 2016

以下代码让我的 Word 2016 加载项非常痛苦:

_application.ActiveWindow.View.ReadingLayout = true;

问题是 Word 2013 和 Word 2016 似乎对上述代码行执行不同的操作。

Word 2013 只会将该设置应用于活动 window。因此,当我打开另一个文档时,它将以编辑模式打开,而不是阅读布局。这就是我想要的行为。

在 Word 2016 中,完全相同的代码行似乎不仅为活动 window 设置 ReadingLayout,而且为设置该设置后打开的所有其他 window(不适用于其他开放 windows)。具体来说,我将打开一个文档,将 ReadingLayout 设置为 true,以便活动 window 更改为阅读布局,然后我将打开另一个文档。它不是以编辑模式打开,而是以阅读布局打开。

即使我关闭并重新打开 Word,所有通过 Word 打开的文档都将以阅读布局打开,直到我手动去更改布局。

我的问题是:有没有办法获得 Word 2013 中存在的行为?如果那不可能,那么有没有一种方法可以在阅读布局中打开文档,而不会弄乱用户对他们将要打开的未来文档的视图设置?

一些背景知识:我正在使用的 Word 加载项用于创建文档模板,这些模板可用于从数据库中的数据生成文档。该加载项能够显示从当前模板生成的文档的预览。此预览应在阅读布局中打开,因为它不打算对其进行更改。

作为参考,这是包含问题代码行的整个函数:

public void OpenDocumentPreview(string path, bool showFeedback)
{
    _application.Documents.OpenNoRepairDialog(path, ReadOnly: true, AddToRecentFiles: false, Visible: true);
    _application.ActiveWindow.View.ReadingLayout = true;
    if (showFeedback)
    {
        _application.ActiveWindow.View.RevisionsFilter.Markup = WdRevisionsMarkup.wdRevisionsMarkupAll;
        _application.ActiveWindow.View.MarkupMode = WdRevisionsMode.wdBalloonRevisions;
        _application.ActiveWindow.View.ShowComments = true;
    }
}

以防万一你想知道,我已经尝试了一些其他的 Open 方法(除了 OpenNoRepairDialog)。它们都会导致相同的行为。

这可能不是最理想的解决方案,但它帮助我解决了与您类似的问题。它涉及拥有自定义文件扩展名并使用文档事件来检查它们。

  • 如果在关闭预览文件前允许打开其他文件,则需要在DocumentOpen事件上设置ReadingLayout = false,使它们以Word默认编辑模式打开.

  • 如果预览文件可能在另一个文件打开之前关闭,您需要在 DocumentBeforeClose 事件上做同样的事情。

这里假设您希望所有模板文件都以打印视图模式打开以进行编辑。

设置 Globals.YourAddin.Application.ActiveWindow.View.Type = WdViewType.wdPrintView 可能不是必需的,但如果没有它,我的文档将以看起来像是 Web 布局视图的方式打开。

Globals.YourAddin.Application.DocumentOpen += doc =>
        {
            if (doc.Name.EndsWith(".customTemplateExtension"))
            {
                Globals.YourAddin.Application.ActiveWindow.View.ReadingLayout = false;
                Globals.YourAddin.Application.ActiveWindow.View.Type = WdViewType.wdPrintView;
            }
        };

Globals.YourAddin.Application.DocumentBeforeClose += (Document doc, ref bool cancel) =>
        {
            if (doc.Name.EndsWith(".customPreviewExtension"))
            {
                    Globals.YourAddin.Application.ActiveWindow.View.ReadingLayout = false;
            }
        };

如果有的话,希望有人能提供更优雅的解决方案。