2016-06-13 2 views
1

Следующий код вызвал у меня много боли в моей Надстройке для слова 2016 года:Установка ReadingLayout в слове Add-In работает по-разному в Слове 2013, чем в Слове 2016

_application.ActiveWindow.View.ReadingLayout = true; 

Проблемы заключается в том, что слово 2013 и Word 2016, похоже, делают разные вещи с указанной выше строкой кода.

Word 2013 применит эту настройку только к активному окну. Таким образом, когда я открываю другой документ, он открывается в режиме редактирования вместо чтения макета. Это поведение, которое я хочу.

В Word 2016 появляется точно такая же строка кода, что и для ReadLayout не только для активного окна, но и для каждого другого окна, которое открывается после того, как этот параметр установлен (не для других открытых окон). В частности, я открою документ, установите для параметра ReadLayout значение true, чтобы активное окно изменилось на макет чтения, затем открою другой документ. Вместо открытия в режиме редактирования он также открывается в макете чтения.

Даже если я закрою и снова открою 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; 
    } 
} 

Только в случае, если вам интересно, я попробовал некоторые из других открытых методов (помимо OpenNoRepairDialog). Все они приводят к такому же поведению.

ответ

1

Это, вероятно, не самое идеальное решение, но оно помогло мне решить проблему, похожую на вашу. Он включает в себя создание пользовательских расширений файлов и использование событий документа для их проверки.

  • Если другие файлы могут быть открыты перед закрытием файла предварительного просмотра, вам необходимо установить ReadingLayout = false на DocumentOpen событие для них, чтобы открыть в режиме редактирования по умолчанию в Word.

  • Если файл предварительного просмотра может быть закрыт до открытия другого файла, вам необходимо сделать то же самое на событии DocumentBeforeClose.

Предполагается, что вы хотите, чтобы все ваши файлы шаблонов открывались в режиме просмотра для редактирования.

Установка Globals.YourAddin.Application.ActiveWindow.View.Type = WdViewType.wdPrintView может быть необязательной, но без этого мои документы открывались в том, что выглядело как вид веб-макета.

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

Надеюсь, кто-то может предложить более элегантное решение, если оно есть.

+0

Хотя это не идеальное решение, я принял тот факт, что надстройки для Word 2013 и Word 2016 работают иначе, и мне, возможно, придется обойти это, реализовав что-то похожее на ваш ответ. Благодарю. –

Смежные вопросы