Есть ли способ захватить горячие клавиши / ярлыки в Excel VSTO, используя только C # и без VBA? - PullRequest
7 голосов
/ 19 февраля 2010

Итак, я хочу записать некоторые ключевые команды в нашей надстройке Excel VSTO на уровне документа. Кажется, я не могу найти способ сделать это, кроме как использовать VBA и поговорить с нашим дополнением к VBA. Любая помощь / примеры будут с благодарностью.

Я использую Excel 2007.

Ответы [ 2 ]

4 голосов
/ 26 мая 2010
  1. Один метод включает использование стороннего решения от Addin-Express .Их продукт включает в себя возможность добавления сочетания клавиш в качестве свойства к командам меню ленты.

  2. Другой способ заключается в использовании низкоуровневых перехватов клавиатуры, через некоторые Win32API , который обычно называют подклассами Windows .Вот отличное объяснение с примером кода, как это сделать.Обратите внимание, что единственная «дополнительная» вещь, которую нужно сделать, чтобы этот код «работал» в VSTO, - это перемещение метода SetHook() в событие Startup, а метода UnhookWindowsHookEx () в событие Shutdown.

    Прочтите статью Стивена Туба о MSDN здесь.

  3. Наконец, есть использование свойства OnAction класса Addin.Этот метод требует использования некоторого VBA ( в терминах метода обратного вызова, который указывает на базовый .net addin ) и работает нормально, если вы готовы распространять некоторые VBA в своем решении ( то есть проект xls или doc w / vba, или, возможно, собственный плагин ).Обратите внимание, что вам также нужно будет пометить comvisible = true и предоставить метод GetAutomationServiceObject, чтобы ваш VBA мог ссылаться на ваш надстройку из кода VBA.

    см. Здесь об этом ...

3 голосов
/ 21 февраля 2010

Вы можете сделать это только через вызовы API для подкласса Excel и отслеживания ключевых команд. Этот старше, но он все еще применяется.

...