1

我看到一篇关于使用 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 **************
4

2 回答 2

5

您还应该看看 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 函数的性能非常出色。
于 2008-12-08T11:20:18.787 回答
1

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

无论如何,有一个解决方法,我发现它非常有限。本讨论对此进行了描述。基本上,您的插件需要在每个工作簿中注入一些 VB 代码来注册它包含的 UDF。

于 2008-09-24T08:14:41.550 回答