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

时间:2008-09-23 21:49:13

标签: c# excel vsto add-in user-defined-functions

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

但是我希望使用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 **************

2 个答案:

答案 0 :(得分:5)

您还应该看看ExcelDna - http://www.codeplex.com/exceldna。 ExcelDna允许托管程序集通过本机.xll接口将用户定义的函数(UDF)和宏公开给Excel。该项目是开源的,可以自由地进行商业用途。

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

使用.xll界面而不是自动化加载项的一些优点包括:

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

答案 1 :(得分:1)

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

无论如何,有一个工作,我发现非常有限。它被描述为in this discussion。基本上,你的插件需要在每个工作簿中注入一些VB代码来注册它包含的UDF。