Как проверить, что Word 2007 вызывает автосохранение в Word Addin? - PullRequest
2 голосов
/ 20 июня 2011

У меня есть некоторые функции внутри обработчика событий DocumentBeforeSave.
Это должно работать только тогда, когда пользователь вручную вызывает Сохранить (нажмите кнопку Сохранить).
Но в Word 2007 есть функция автосохранения, а событие DocumentBeforeSave генерирует каждый раз, когда автосохранение работает. Как проверить, что сохранение вызывается через автосохранение или пользователь вручную вызывает сохранение?

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Похоже, что нет встроенного способа сделать это, потому что объектная модель просто не поддерживает его (на эту ссылку ), но вы можете использовать VBA для переопределения горячей клавиши и кнопки сохранения по умолчанию. щелкните и отправьте эти вызовы в вашу сборку .NET (за эту ссылку ). Просто убедитесь, что вы вызвали сохранение вручную, чтобы убедиться, что документ действительно сохраняется.

0 голосов
/ 05 февраля 2016

Существует несколько способов определить разницу.

Вариант 1 (лучший)

Application.WordBasic.IsAutosaveEvent

Вариант 2 (что я делал до нахождения варианта 1)

  • Перехватить команду FileSave (и FileSaveAs) с ленты:

    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
       <commands>
         <command idMso="FileSave" onAction="SaveIntercept" />
       </commands>
     </customUI>
    
  • Установите флаг в методе SaveIntercept и задайте для CancelDefault значение false, чтобы сохранение продолжалось.

    public void SaveIntercept(IRibbonControl control, ref bool CancelDefault)
    {
        logger.Info("Intercepted Manual Save");
        ManualSave = true;
        CancelDefault = false;
    }
    
  • Также реализуйте BeforeDocument_BeforeSave и проверьте флаг там. Если флаг был установлен, он был ручным, в противном случае это автосохранение (или потенциально происходит из другой надстройки; не уверен, работает ли это).

    bool quit = !customizations.ManualSave;
    if (quit)
    {
        logger.Info("Autosave. Allowing Word to handle this save.");
        e.Cancel = false;
        return;
    }
    else
    {
        logger.Info("Manual save. Proceeding.");
        customizations.ManualSave = false;
    }
    

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

Интересно, что после сохранения также есть способ узнать, как описано здесь ( обновленная версия здесь ).

...