#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? Я в аналогичном случае