Как развернуть код C# и сценарии VBA в одном дополнении Word VSTO

Лежание в основе проблемы, которую я пытался решить, должно применить пользовательские привязки клавиш для внутренних дополнительных методов Word VSTO (develiped в C#):

Globals.ThisAddIn.Application.KeyBindings.Add(  
    Word.WdKeyCategory.wdKeyCategoryCommand,  
    "MyMethodName",  
    myKey,
    ref _missing,  
    ref _missing);

Ну, проблема состоит в том, что этот код всегда выдает исключение потому что (Microsoft MSDN): “нет никакого пути (в объектной модели или приложении Word) для привязки с чем-либо кроме макросов VBA”.

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

Эта идея имеет шанс для живого:.NET AddIn и VBA-поддерживающий шаблон Word. Но в моем проекте я должен поставить это дополнение в одиночном нажатии Однажды пакет к машинам конечного пользователя (в корпоративной сети, где настройки безопасности не являются проблемой).

Таким образом, Вопрос: как сделать соединение Дополнения C# (Лента) и сценарии VBA в одном пакете развертывания?

У кого-либо есть такой опыт совместно использовать?

7
задан Community 23 May 2017 в 11:52
поделиться

3 ответа

Начнем с чего-то более простого:

# z is not yet defined
irb(main):001:0> defined?(z)
=> nil

# Even though the assignment won't execute,
# the mere presence of the assignment statement
# causes z to come to life.
irb(main):002:0> z = 123 if false
=> nil
irb(main):003:0> defined?(z)
=> "local-variable"
irb(main):004:0> z
=> nil

Теперь мы можем найти ваш первый пример.

foo = true unless defined?(foo)

Определено ли foo ? Прежде чем нажать ENTER в irb , нет. Однако наличие оператора присвоения приводит к тому, что foo оживает. Это означает, что оператор присвоения не будет выполнен, оставляя foo в наличии, но имея nil в качестве его значения. Какое последнее выражение вычисляется в строке irb ? Это , если не определено? (foo) , что равняется нулю .

Дополнительные сведения о том, как назначения (даже те, которые не выполняются) вызывают существование переменных, см. в разделе Неоднозначность переменных/методов .

Во втором примере нет ничего загадочного: fooo не определено, поэтому выполняется код в блоке, устанавливающий fooo в false . Это назначение является последним вычисляемым выражением, поэтому false является возвращаемым значением нашего блока.

-121--2451591-

Используйте 2.5.2 SDK. Он хорошо работает под Linux, на самом деле.

Я бы также последовал рекомендации для Android, где Linux определенно не является гражданином второго класса.

-121--4903731-

И вот мы идем!

Обход: развертывание нескольких офисных решений в одном установщике ClickOnce для .NET Framework 3.5.

Много ручной работы. Но идея состоит в том, чтобы обновить пакет ClickOnce дополнительными зависимостями (редактировать XML манифеста). Стандартная программа установки ClickOnce сделает все остальное для вас.

1
ответ дан 7 December 2019 в 20:36
поделиться

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

0
ответ дан 7 December 2019 в 20:36
поделиться

Я задал ваш вопрос команде разработчиков продукта ClickOnce. Он сказал, что вы можете включить сценарии в развертывание VSTO, и вы можете сделать шаги после развертывания с помощью надстройки VSTO, если вы нацелены на .NET 4.0. Он сказал, что вы также можете сделать это с помощью функций VBA Interop в VSTO. Вы случайно не используете .NET 4.0?

0
ответ дан 7 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: