如何使用VSTO 2005 SE使用C#Excel加载项创建Excel 2003 UDF

时间:2020-03-06 14:37:48  来源:igfitidea点击:

我看到了一篇有关使用VBA在VSTO托管代码中创建Excel UDF的文章:http://blogs.msdn.com/pstubbs/archive/2004/12/31/344964.aspx。

但是,我想使用VSTO 2005 SE在CExcel加载项中进行此操作,请问有什么帮助吗?

我尝试了Romain指出的技术,但是在尝试加载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 **************

解决方案

使用简单的自动化插件创建UDF非常容易。我们将必须创建一个专用程序集并使它在COM中可见。不幸的是,我们无法在托管的VSTO Excel插件中定义UDF。

无论如何,有一个解决方法,我发现这是非常有限的。在此讨论中对其进行了描述。基本上,外接程序需要向每个工作簿中注入一些VB代码,以注册其中包含的UDF。

我们还应该查看ExcelDna http://www.codeplex.com/exceldna。 ExcelDna允许托管程序集通过本机.xll接口向Excel公开用户定义的函数(UDF)和宏。该项目是开源的,可免费用于商业用途。

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

使用.xll接口而不是自动化附件的一些优点包括:

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