如何使用VSTO 2005 SE使用C#Excel外接程序创建Excel 2003 UDF

如何使用VSTO 2005 SE使用C#Excel外接程序创建Excel 2003 UDF,c#,excel,vsto,add-in,user-defined-functions,C#,Excel,Vsto,Add In,User Defined Functions,我看到了一篇关于使用VBA在VSTO托管代码中创建Excel UDF的文章: 不过,我想使用VSTO 2005 SE在C#Excel加载项中实现这一点,有人能帮忙吗 我尝试了Romain指出的技术,但在尝试加载Excel时,出现以下异常: 无法创建自定义程序集 找不到或无法加载。你 仍然可以编辑和保存 文件 详情: Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) **************

我看到了一篇关于使用VBA在VSTO托管代码中创建Excel UDF的文章:

不过,我想使用VSTO 2005 SE在C#Excel加载项中实现这一点,有人能帮忙吗

我尝试了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 **************

使用简单的自动化插件创建UDF非常容易。您必须创建一个专用程序集,并使其在COM中可见。很遗憾,您无法在托管VSTO Excel加载项中定义自定义项


无论如何,有一个工作环境,我发现它非常有限。对其进行了描述。基本上,您的加载项需要向每个工作簿中注入一些VB代码,以注册它包含的自定义项。

使用简单的自动化加载项创建自定义项非常简单。您必须创建一个专用程序集,并使其在COM中可见。很遗憾,您无法在托管VSTO Excel加载项中定义自定义项


无论如何,有一个工作环境,我发现它非常有限。对其进行了描述。基本上,您的加载项需要向每个工作簿中注入一些VB代码,以注册它包含的UDF。

您还应该看看ExcelDna-。ExcelDna允许托管程序集通过本机.xll接口向Excel公开用户定义函数(UDF)和宏。该项目是开源的,可以自由地用于商业用途

用户定义的函数可以用C#、Visual Basic、F#、Java(使用IKVM.NET)编写,也可以编译为.dll或通过基于文本的脚本文件公开。支持从Excel 97到Excel 2007的Excel版本

使用.xll接口而不是制作自动化外接程序的一些优点包括:

  • 支持旧版本的Excel
  • 部署更容易,因为不需要COM注册,并且工作表公式中对用户定义函数的引用不会绑定到外接程序的位置,并且
  • 通过ExcelDna公开的UDF函数的性能非常出色

您还应该看看ExcelDna-。ExcelDna允许托管程序集通过本机.xll接口向Excel公开用户定义函数(UDF)和宏。该项目是开源的,可以自由地用于商业用途

用户定义的函数可以用C#、Visual Basic、F#、Java(使用IKVM.NET)编写,也可以编译为.dll或通过基于文本的脚本文件公开。支持从Excel 97到Excel 2007的Excel版本

使用.xll接口而不是制作自动化外接程序的一些优点包括:

  • 支持旧版本的Excel
  • 部署更容易,因为不需要COM注册,并且工作表公式中对用户定义函数的引用不会绑定到外接程序的位置,并且
  • 通过ExcelDna公开的UDF函数的性能非常出色