Пользовательские функции в Excel AddIn на VB.NET

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Пользовательские функции в Excel AddIn на VB.NET

Сообщение anvg » 21.05.2007 (Пн) 10:49

Доброе время суток.
Помогите, пожалуйста, разобраться. Как в своей надстройке на VB.NET реализовать пользовательские функции для Excel? Искал, пока нигде не нашёл. В VB6 это решалось просто, через автоматизацию и атрибут Global Multiuse для класса, предоставлявшего функции для рабочего листа. Как это сделать в VB.NET?

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 22.05.2007 (Вт) 17:55

Похоже, что никак:(. Нашёл в MSDN
Microsoft Visual Studio Tools for Office Technical Articles
Converting Code from VBA to Visual Basic .NET
...
When thinking about whether to convert your VBA code to Visual Basic .NET, consider the following:
Use VBA...
...
When you want to use Excel custom functions.
...

Остаётся делать врап в VBAProject над функциями класса, созданного как COM :( [/quote]

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 23.05.2007 (Ср) 16:03

А если очень поискать :lol: . Спасибо Eric Carter
Код: Выделить всё

Imports System.Runtime.InteropServices
Imports Microsoft.Win32

Namespace MyAddIn
<ClassInterface(ClassInterfaceType.AutoDual), ComVisible(True)> _
Public Class MyFunctions
    Private Shared Function GetSubKeyName(ByVal AddInType As Type) As String
        Return "CLSID\{" & AddInType.GUID.ToString.ToUpper & "}\Programmable"
    End Function
    <ComRegisterFunctionAttribute()> _
    Public Shared Sub RegisterFunction(ByVal AddInType As Type)
        Registry.ClassesRoot.CreateSubKey(GetSubKeyName(AddInType))
    End Sub

    <ComUnregisterFunctionAttribute()> _
    Public Shared Sub UnRegisterFunction(ByVal AddInType As Type)
        Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(AddInType), False)
    End Sub

    Public Function MySum(ByVal A As Double, ByVal B As Double) As Double
        Return A + B
    End Function
End Class
End Namespace


Добавлено
А вот более продвинутая конструкция, предлагаемая ExcelDNA
Позволяет размещать свои функции по категориям, выдавать описание в мастере функций и описание переменных.

Есть ещё, очень крутая, но платная конструкция ManagedXLL

Люди, коллеги, я сам с собой долго беседовать буду? Кто-нибудь пытался это делать на VB.NET?

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 29.05.2007 (Вт) 11:51

Коллеги, кто-нибудь может помочь перекомпилировать библиотеку?
У кого есть полный VS2005SP1 c C# и C++, сделайте доброе дело.
Дело в том, что в ExcelDNA не поддерживается коды символов выше 127, так как используется Encoding.ASCII, соответственно, все описания функций и их переменных выводятся как Я идиот! Убейте меня, кто-нибудь! ??. Я, как мог, заменил в исходнике XlCustomMarshal.cs Encoding.ASCII на Encoding.GetEncoding("Windows-1251"), но мне не на чем перекомпилировать.
Положил здесь. http://www.rapidshare.ru/293681
Вышлите, пожалуйста, результирующую библиотеку на anvg(собака)inbox.ru или выложите где-нибудь.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

    TopList