Excel DNA — Могу ли я избежать выполнения regasm все вместе?

#excel #vba #regasm #xll #excel-dna

#excel #vba #regasm #xll #excel-dna

Вопрос:

Я пытаюсь оценить Excel DNA, чтобы использовать его в одной из моих надстроек Excel. Я использую функции C # (.NET 4.0) и хочу вызвать эти функции из Excel. Причина, по которой я заинтересован, заключается в том, что пользователи моего addin не являются администраторами, и, следовательно, было бы прорывом, если бы я мог найти решение не выполнять regasm в моей .NET dll, чтобы заставить мой addin работать.

Я понимаю, что если это похоже на функцию рабочего листа (с простыми возвращаемыми типами и аргументами), например: private string Add (int a, double b) я могу легко обернуть их, используя Excel dna. Кроме того, я понимаю, что я также могу вызывать эти простые функции с помощью Application.Run из VBA.

Но, если у меня сложный тип, связанный с API, и я хочу использовать его из VBA, тогда мне нужно повторно обрабатывать эту сборку и типы? пример, как в этом:

 private MyType AddLogic (myType1 A,  myType2 B) 
 

Или есть какой-нибудь способ в Excel DNA, чтобы я мог также использовать такие функции в VBA без какого-либо regasm или regsvr32?

Спасибо, Мани

Ответ №1:

Вы имеете в виду встроенную поддержку COM-сервера в Excel-DNA. Есть несколько вариантов, все они отлично работают для пользователей без прав администратора.

  • Вы можете зарегистрировать типы COM во время выполнения в своем AutoOpen — тогда они будут доступны с поздней привязкой из VBA (поэтому все, что в VBA вызывает эти типы COM, будет «Variant», и вы не получите intellisense).
  • Вы можете зарегистрировать типы COM в regsvr32, используя .xll в качестве вашего COM-сервера. Excel-DNA регистрирует свои типы в разделе HKEY_LOCAL_USER реестра, в который пользователь всегда может записать.Тогда проект VBA, который использует типы, предоставляемые COM, будет выполняться, даже если надстройка .xll не загружена.
  • Чтобы добавить информацию о библиотеке типов для типов, доступных COM, вам нужно будет выполнить регистрацию regsvr32, которая снова работает без прав администратора, а затем вы получаете intellisense и т. Д. В VBA.

Ни в одном из этих случаев вы не используете RegAsm, который регистрирует управляемые сборки для активации во время выполнения, поскольку собственный Excel-DNA .xll обеспечивает активацию вашего COM.Типы NET сами по себе.

Если вы не заинтересованы в предоставлении функций рабочего листа, лент и т. Д. вам, вероятно, не нужен Excel-DNA для этого. Вы можете зарегистрировать сборки .NET для использования не-администратором из VBA, просто создав скрипт .reg, который исправит записи реестра в HKEY_LOCAL_USER вместо HKEY_LOCAL_USER. Я хочу сказать, что регистрация Excel-DNA без участия администратора не является особой магией. Основная причина интеграции этой функции в Excel-DNA заключается в том, чтобы гарантировать, что эти объекты активируются в том же домене приложения, что и остальная часть надстройки Excel-DNA, что сложно, а иногда и важно.

Комментарии:

1. Спасибо за разъяснение Govert. Для меня 2-й вариант звучит неплохо. Просто для подтверждения, вы хотите сказать, что regsvr32 в excel dna .xll не требует прав администратора, поскольку он делает записи реестра только для HKLU. Потому что я знаю, что когда вы обычно запускаете regsvr32 в собственной dll, для этого нужны права администратора.

2. как обстоят дела с этим Mani? Я в аналогичном случае