我有一个C#Excel加载项项目"MyExcelAddIn",它有一个公共方法Foo()来做复杂的事情.出于测试目的,加载项还定义了一个工具栏按钮,该按钮连接到Foo(),因此我可以测试它并验证单击按钮调用Foo()并执行我想要它做的事情.这可以.
现在我想从C#Windows Forms项目中调用此方法.在Windows窗体项目中,我可以创建一个Excel实例并使其可见并验证我的VSTO加载项是否正在运行,因为我可以看到该按钮并且它可以正常工作.但我无法弄清楚如何从Windows窗体项目以编程方式调用Foo().我已经google了一点,得到了"MyExcelAddIn"COMAddIn对象,但无法解决如何调用Foo().
它看起来像这样:
// Create Excel and make it visible Application excelApp = new Application(); excelApp.Visible = true; // I know my VSTO add-in is running because I can see my test button // Now get a reference to my VSTO add-in Microsoft.Office.Core.COMAddIns comAddIns = _excelApp.COMAddIns; object addinName = "MyExcelAddIn"; Microsoft.Office.Core.COMAddIn myAddin = comAddIns.Item(ref addinName); // This works, but now what? How do I make a call on myAddin? // Note that myAddin.Object is null...
所以我想知道如何从我的Windows窗体应用程序中调用Foo().请注意,我可以完全控制Windows窗体应用程序和加载项,我怀疑我必须对它们(尤其是加载项)进行更改,但我不知道如何执行此操作.
请注意,这是一个VS2008 C#应用程序,我正在使用Excel 2003.
如果您正在构建应用程序级别的加载项,我相信这可能是您的答案:MSDN VSTO文章
它涉及两个步骤:(来自文章)
在您的加载项中,将对象公开给其他解决方案.
在另一个解决方案中,访问外接程序公开的对象,并调用该对象的成员.
另一个解决方案可能是:(再次来自文章)
任何在与加载项不同的进程中运行的解决方案(这些类型的解决方案也称为进程外客户端).其中包括自动化Office应用程序的应用程序(如Windows窗体或控制台应用程序)以及在不同进程中加载的加载项.