使用winforms,C#FW4.5使用后期绑定打开excel工作表,如下所示:
objExcel = CreateObject("Excel.Application")
现在我想使用该InvokeMember
方法,但是我不知道我可以调用的所有excel成员。例如,我知道我可以这样称呼它:InvokeMember("Close",...
为了关闭excel,但是在哪里可以找到我可以调用的所有成员的列表以及每个成员的作用呢?
使用winforms,C#FW4.5使用后期绑定打开excel工作表,如下所示:
如果您必须使用后期绑定,则使用c#4.0的dynamic
关键字要比使用容易得多InvokeMember
,尽管它不会告诉您可以提前调用哪些方法。
请查看以下通过dynamic
关键字使用后期绑定的代码。请注意,Visual Studio如何允许我键入任何旧内容。尽管无法提供最终成员的自动完成功能,但它确实显示了我已经使用过的商品的成员。我要等到运行时才知道它是否正确(这就是这种后期绑定的局限性)。
C#现在支持动态后期绑定。该语言一直被强类型化,并且在4.0版本中仍然如此。微软认为,这使C#易于使用,快速且适合.NET程序员所从事的所有工作。但是,当你需要与不是基于.NET系统进行通信的时候....在C#中的动态关键字来处理这些其他方法的麻烦响应 告诉我更多
...更具体地说:
C#团队在C#4版本中特别针对的COM互操作方案是针对Microsoft Office应用程序(例如Word和Excel)进行编程。目的是使此任务在Visual C#中像在Visual Basic中一样容易和自然。告诉我更多...
OP:
现在我想使用InvokeMember方法,但是我不知道我可以调用的所有excel成员
尽管后期绑定很好,即使使用dynamic
,我也喜欢早期绑定。要获取方法列表,可以通过将Microsoft.Office.Interop.Excel添加到项目中来使用早期绑定更加容易且类型安全。
早期绑定:
var application = new Microsoft.Office.Interop.Excel.Application(); application.Visible = true; application.ShowWindowsInTaskbar = true;
在VS中:
C#4带有一些您只有在处理COM时才会看到的东西,例如索引属性 -在C#类型中是不可能的。
你不能定义在具有索引属性C#的类型,但你可以使用他们提供你在一个COM类型这样做更多
仅当针对COM interop API编写代码时,才支持C#4.0中的某些较小的语言功能
例如
ws.Range["A1", "B3"].Value = 123;
...比c#4之前的版本容易得多:
ws.get_Range("A1", "B3").Value2 = 123;
C#4.0支持COM互操作类型的索引属性。您无法在C#中定义具有索引属性的类型,但是可以在COM类型上使用它们,但可以使用它们。
C#4.0-.NET Framework 4中的新C#功能,MSDN Mag,2010年7月
动态.NET-了解C#4中的动态关键字,MSDN Mag,2011年2月