如何创建Excel 2003中UDF用C#Excel加载使用VSTO 2005 SE(How to

2019-09-29 11:02发布

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

不过,我想在C#中的Excel这个工作加载使用VSTO 2005 SE,任何一个可以帮助吗?

我尝试了这种方法罗曼指出,但是,试图加载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 **************

Answer 1:

你也应该看看ExcelDna - http://www.codeplex.com/exceldna 。 ExcelDna允许管理器组件通过本机.xll接口以暴露用户定义函数(UDF)和宏到Excel。 该项目是开源和自由允许商业用途。

用户定义的函数可以用C#编写,Visual Basic中,F#,爪哇(使用IKVM.NET),其可被编译为.dll或通过一个基于文本的脚本文件曝光。 Excel版本从Excel 97到Excel 2007的支持。

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

  • 旧版本的Excel都支持,
  • 部署要容易得多,因为不需要COM注册并在工作表中公式用户定义函数的引用不绑定到外接的位置,
  • 的UDF函数通过ExcelDna露出的性能是优异的。


Answer 2:

使用简单的自动化插件创建UDF是很容易的。 你将不得不创建一个专用组件,并使其从COM可见。 不幸的是,你不能定义的管理VSTO Excel加载项UDF中。

无论如何,有一个变通,我发现非常有限。 它描述了在本次讨论 。 基本上,你的插件需要注入一些VB代码到每个工作簿登记它所包含的UDF。



文章来源: How to create Excel 2003 UDF with a C# Excel add-in using VSTO 2005 SE