Как создать Excel 2003 UDF с помощью надстройки C # Excel с помощью VSTO 2005 SE - PullRequest
1 голос
/ 24 сентября 2008

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

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

Я попробовал технику, указанную Роменом, но при попытке загрузить 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 **************

Ответы [ 2 ]

5 голосов
/ 08 декабря 2008

Вы также должны взглянуть на 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, превосходна.
1 голос
/ 24 сентября 2008

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

Во всяком случае, есть обходной путь, который я нашел очень ограниченным. Это описано в этом обсуждении . По сути, ваш плагин должен внедрить некоторый VB-код в каждую книгу, чтобы зарегистрировать UDF, который он содержит.

...