Как создать Excel 2003 UDF с надстройкой C# Excel с использованием VSTO 2005 SE


1

Я увидел статью о создании Excel UDF в управляемом коде VSTO, используя VBA: http://blogs.msdn.com/pstubbs/archive/2004/12/31/344964.aspx.

Однако я хочу, чтобы эта работа работала над надстройкой C# Excel с использованием VSTO 2005 SE, может ли кто-нибудь помочь?

Я попробовал технику Romain указал, но при попытке загрузить Excel я получаю следующее исключение:

Узел настройки не может быть найден или не может быть загружен. Вы еще можно изменить и сохранить документ .....

Детали:

Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) 


************** Exception Text ************** 
System.Runtime.InteropServices.COMException (0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) 
at Microsoft.Office.Interop.Excel._Application.Run(Object Macro, Object Arg1, Object Arg2, Object Arg3, Object Arg4, Object Arg5, Object Arg6, Object Arg7, Object Arg8, Object Arg9, Object Arg10, Object Arg11, Object Arg12, Object Arg13, Object Arg14, Object Arg15, Object Arg16, Object Arg17, Object Arg18, Object Arg19, Object Arg20, Object Arg21, Object Arg22, Object Arg23, Object Arg24, Object Arg25, Object Arg26, Object Arg27, Object Arg28, Object Arg29, Object Arg30) 
at ExcelWorkbook4.ThisWorkbook.ThisWorkbook_Startup(Object sender, EventArgs e) in C:\projects\ExcelWorkbook4\ExcelWorkbook4\ThisWorkbook.cs:line 42 
at Microsoft.Office.Tools.Excel.Workbook.OnStartup() 
at ExcelWorkbook4.ThisWorkbook.FinishInitialization() in C:\projects\ExcelWorkbook4\ExcelWorkbook4\ThisWorkbook.Designer.cs:line 66 
at Microsoft.VisualStudio.Tools.Applications.Runtime.AppDomainManagerInternal.ExecutePhase(String methodName) 
at Microsoft.VisualStudio.Tools.Applications.Runtime.AppDomainManagerInternal.ExecuteCustomizationStartupCode() 
at Microsoft.VisualStudio.Tools.Applications.Runtime.AppDomainManagerInternal.ExecuteCustomization(IHostServiceProvider serviceProvider) 


************** Loaded Assemblies ************** 
1

Создание UDF с помощью простой надстройку автоматизации довольно легко. Вам нужно будет создать выделенную сборку и сделать ее видимой из COM. К сожалению, вы не можете определить UDF в управляемом VSTO Excel Addin.

Во всяком случае, есть работа вокруг, которую я нашел очень ограничивающей. Описывается in this discussion. В основном, ваш addin должен вводить некоторый код VB в каждую книгу для регистрации содержащегося в нем UDF.


5

Вы также должны взглянуть на ExcelDna - http://www.codeplex.com/exceldna. ExcelDna позволяет управляемым сборкам предоставлять пользовательские функции (UDF) и макросы в Excel через собственный .xll-интерфейс. Проект является открытым исходным кодом и свободно разрешает коммерческое использование.

Ваши пользовательские функции могут быть записаны на C#, Visual Basic, F #, Java (с использованием IKVM.NET) и могут быть скомпилированы в DLL или представлены через текстовый файл сценария. Поддерживаются версии Excel из Excel 97 в Excel 2007.

Некоторые преимущества использования интерфейса .xll, а не делать автоматизации надстроек включают в себя:

  • старые версии Excel поддерживаются,
  • развертывание гораздо проще, так как регистрация COM не требуется, и ссылки определяемые пользователем функции в формулах рабочих таблиц не привязаны к местоположению надстройки, а
  • производительность функций UDF, открытых через ExcelDna, отличная.