Как создать UDF для Excel 2003 с надстройкой C# Excel с помощью VSTO 2005 SE

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

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

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

The customization assembly could not be found or could not be loaded. You can still edit and save the document.....

Подробности:

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 **************
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
3 288
2

Ответы 2

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

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

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

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

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

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

Другие вопросы по теме