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

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

不过,我想使用VSTO 2005 SE在C#Excel加载项中工作,任何人都可以帮忙吗?

我试过罗曼指出的技术,但是当试图加载Excel时,我得到以下exception:

定制程序集无法find或无法加载。 你仍然可以编辑和保存文件…..

细节:

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 ************** 

你也应该看看ExcelDna – http://www.codeplex.com/exceldna 。 ExcelDna允许托pipe程序集通过本机.xll接口将用户定义的函数(UDF)和macros展示给Excel。 该项目是开源的,可以自由地商业使用。

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

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

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

使用简单的自动插件来创buildUDF非常简单。 你将不得不创build一个专用的程序集,并使其从COM中可见。 不幸的是,你不能在托pipe的VSTO Excel Addin中定义一个UDF。

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