Excel UDF «Недопустимая ошибка надстройки» - PullRequest
1 голос
/ 30 сентября 2010

Я пытаюсь создать пользовательскую функцию Excel 2007 vb.net (UDF) с использованием VS 2010 и перешел к этому этапу (заимствуя из примера Эрика Картера в http://blogs.msdn.com/b/eric_carter/archive/2004/12/01/273127.aspx):

Namespace AutomationAddin
    <Guid("1aeeb1b5-e099-4f7f-aeb0-3e9f19b64f62")>
    <ClassInterface(ClassInterfaceType.AutoDual)>
    <ComVisible(True)>
    Public Class MyFunctions
        Public MyFunctions()
        Public Function MultiplyNTimes(ByVal number1 As Double, ByVal number2 As Double, ByVal timesToMultiply As Double) As Double
            Dim result As Double = number1
            For i As Integer = 0 To timesToMultiply - 1
                result = result * number2
            Next
            Return result
        End Function
        <ComRegisterFunctionAttribute()>
        Public Shared Sub RegisterFunction(ByVal type As Type)
            Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type, "Programmable"))
            Dim key As RegistryKey = Registry.ClassesRoot.OpenSubKey(GetSubKeyName(type, "InprocServer32"), True)
            key.SetValue("", (System.Environment.SystemDirectory + "\mscoree.dll"), RegistryValueKind.String)
        End Sub
        <ComUnregisterFunctionAttribute()>
        Public Shared Sub UnregisterFunction(ByVal type As Type)
            Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type, "Programmable"), False)
        End Sub
        Private Shared Function GetSubKeyName(ByVal type As Type, ByVal subKeyName As String) As String
            Dim s As System.Text.StringBuilder = New System.Text.StringBuilder
            s.Append("CLSID\{")
            s.Append(type.GUID.ToString.ToUpper)
            s.Append("}\")
            s.Append(subKeyName)
            Return s.ToString
        End Function
    End Class
End Namespace

Однако, когда я собираю его с помощью VS 2010 и пытаюсь загрузить его в Excel 2007 с помощью Addin Manager> Automation, я нахожу его в списке AutomationAddin.AutomationAddin.MyFunctions и нажимаю кнопку «ОК только для того, чтобы получить ошибку» AutomationAddin.AutomationAddin.MyFunctions не является действительной надстройкой. " Я установил настройки сборки, чтобы зарегистрироваться для COM-взаимодействия.

Я посмотрел онлайн и попробовал следовать этой статье Как получить COM Server для Excel, написанный на VB.NET, установленный и зарегистрированный в списке серверов автоматизации? , но безрезультатно. Я проверил свой реестр (после того, как собрал свой проект) и в CLSID / {myGuid} / InprocServer32 / Default данные установлены в C: \ WINDOWS \ system32 \ mscoree.dll, а CLSID / {myGuid} / Programmable уже существует.

Я не совсем уверен, что я делаю неправильно, и буду признателен за любые указания или предложения по теме.

Приветствия

Ben

Ответы [ 2 ]

0 голосов
/ 27 июня 2014

Я не знаю, относится ли это к данному вопросу (особенно после всего этого времени), но я изначально начал с надстройки COM (созданной с помощью компоновщика проектов Excel 2010 в надстройке Excel 2010).Затем я вручную добавил надстройку автоматизации (для пользовательских функций) в тот же проект, используя блог Эрика Картера и другие примеры.Два отлично работали независимо друг от друга.Только после объединения двух в одном и том же пространстве имен (по какой-то навязчиво аккуратной причине) я начал получать ошибку «... не является допустимой надстройкой».Потратил день, вырывая мои волосы, а затем снова разделил пространства имен - проблема ушла.

0 голосов
/ 01 сентября 2011

Возможно, вы захотите ознакомиться с этой статьей ( Сборка и развертывание .NET COM Assembly ), которая может оказаться полезной в вашем случае.

...