2016-10-25 7 views
2

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

Этот обработчик отлично работает, за исключением одного исключения. Данное исключение исходит из следующего:

  1. Открываю документ с текстом и редактирую текст.
  2. Я нажимаю на кнопку закрытия.
  3. Word спрашивает меня, если я хочу save, don't save или cancel.
  4. Я выбираю don't save.

После этих шагов офис по-прежнему заставляет меня в событии DocumentBeforeSave. Без способа определить, намерен ли пользователь отменить его сохранение или нет.

Есть ли способ проверить, выбрал ли пользователь сохранение или нет, и если да, то как? До сих пор MSDN и другие источники пришли пустым.

Примечание: В офисе 2013 и выше, то это должно быть проверено Doc.IsInAutosave, к сожалению, эта функция не существует в офисе 2007 и Office 2010.

ответ

1

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

Общим решением является перехват фактической команды «Сохранить» вместо регистрации обработчика события для события DocumentBeforeSave (который, как вы описали, также запускается, если фактическая операция сохранения никогда не выполняется).

Как это делается, описано в моем ответе here. Обратите внимание, что вам нужно будет определить пользовательскую команду сохранения в своем ленточном XML, а затем поместить код, который должен выполняться во время сохранения в соответствующей функции обратного вызова ленты.

+0

Ваше предположение верно, это решает проблему, которая у меня есть. Большое спасибо. Я никогда не знал, что это возможно. – creulcat

+0

Так как это решило некоторые преднамеренные проблемы, этот метод, похоже, не улавливает пользовательскую информацию о закрытии документа и получении подсказки с вопросом, хочу ли я сохранить свои изменения. – creulcat

+1

@creulcat: Если вам повезет, вы можете заставить этот сценарий работать, перезаписав соответствующие команды (вы можете попробовать, например, «FileClose», «FileCloseAll», «FileCloseOrExit», «WindowClose» или что-нибудь еще, что похоже на закрытие документ). Конечно, будет непросто охватить все возможные сценарии ... –