Excel加载项在类库之间共享内存
环境:C#,.NET 3.5,Windows 7 64,Excel 2007,Visual Studio 2010
我有一个VS2010 3个项目:
Projet«商业»:具有全局静态variables的类库
List<BusinessClass>
项目«加载项»:扩展性共享加载项和加载项类:
[GuidAttribute("A9E83593-395F-4112-855D-A68C5088151F"), ProgId("eFrontCubeAddIn.CubeAddIn")] public class CubeAddIn : Object, Extensibility.IDTExtensibility2, ICustomTaskPaneConsumer {…}
Excel将调用OnConnection,我将使用Excel对象(ExcelApp =(Excel.Application)应用程序;)进行交互。 “Add-In”中的所有交互都通过COM(InvokeMember)完成。 List<BusinessClass>
是从“Add-In”创build和填充的,
项目«公式»:class级图书馆。 一个UDF Excel的具体公式。 方法使用以下模型构build,并使用[ComRegisterFunctionAttribute] RegisterFunction(Type type)注册…
[Guid("5268ABE2-9B09-439d-BE97-2EA60E103EF6")] [ClassInterface(ClassInterfaceType.AutoDual)] [ComVisible(true)] public class MyFunctions { public double MyUdfFunction(double number1, double number2) { { return number1 * number2; }
我的问题是非常简单的解释:我有一个function区和一个自定义窗格项目«添加»填充List<BusinessClass>.
当Excel用户在单元格中input'= MyUdfFunction(6; 7)'时,我的方法在«Formulas»中被调用。 由于它来自不同的过程(来自Excel),UDF无法访问«业务»实例, List<BusinessClass>
无法访问。
UDF可能有时被称为超过500.000倍为了速度的原因,我不想插入一个VBA脚本调用我的UDF在循环中。 出于速度的原因,我不想使用共享内存,命名pipe道,WCF或其他工件。 不想使用UDF服务(不能使用Sharepoint服务器)。
我知道,当你在不同的进程中,你不能使用其他进程的数据。
任何让“公式”直接访问“商业”实例的想法? 像所有3个项目在同一个过程中
在此先感谢让·玛丽
您的“公式”项目是Excel自动化加载项。 Add-in Express允许您在同一个程序集中拥有COM加载项和XLL加载项; 他们将加载到相同的AppDomain,检查如何:在一个程序集中创build一个COM加载项,XLL UDF和RTD服务器 。 更确切地说,自动化加载项也可以在同一个程序集中实现,但是在所有情况下都不能在同一个AppDomain中加载自动化加载项。
另请注意另一个博客: 从Excel XLL加载项调用COM加载项:高级示例 。
为了提高速度,您需要尽可能使用XLL界面,尤其是UDF。 我build议你看看使用Addin Express(费用)或者Excel DNA(免费),这两种方法都可以使用Interop-COM和XLL进程来为.NET提供.NET接口。