使用C#创build新的Excel公式/函数

我们希望能够以编程方式创build一个Excel工作簿,该工作簿将从单元格中调用自定义代码。 单元格看起来像这样:

=MyCode(A1:A10) 

我的第一个想法是使用VBA,但由于该algorithm是专有的权力,是希望它被保护。 我可以把一个密码,但它是很好的文档(在这里在StackOverflow)如何绕过这样的密码。

我的第二个想法是在Visual Studio中创build一个Excel 2013 Workbook项目,但是我没有发现任何有关如何在C#中公开一个函数的有用信息,因此可以像我所描述的那样调用它。

接下来,我想让VBA调用C#,并在https://msdn.microsoft.com/en-us/library/bb608613.aspx上find说明。 我遵循这些说明的信,但是当我尝试运行VBA代码时,GetManagedClass函数出现错误:不支持对象库function。

如何做这样的事情有什么好的参考?

你正在寻找Excel-DNA 。 这个开放源代码库允许您创build受pipe理的Excel加载项,并支持创build用户定义的函数,还支持macros,实时RTD数据源等。

在C#中创build一个Excel UDF就像下面这样简单:

 [ExcelFunction(Description = "My first .NET function")] public static string SayHello(string name) { return "Hello " + name; } 

你可以从一个单元中调用:

 =SayHello("Walter") 

为了保护.NET的代码,你需要使用一个混淆器 – 有各种免费和付费的。

我也尝试过这个例子,同样的错误。 我find了一个适合我的解决scheme。

在ISheet1.cs文件中,用下面的代码replaceISheet1接口声明。 此代码使ISheet1接口公开,它应用http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comvisibleattribute.aspx属性使该接口对COM可见。

C#

 [System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); } 

她的全文: http : //www.nullskull.com/q/10059408/c-code-to-set-excel-workbook-macro-enabled-and-to-trust-vba-projects.aspx