我需要用C#完成一个应用程序。
现在我想得到一个控制Excel文件获取数据的函数。
我使用了getActiveObject("Excel.Application")
,但这没有返回任何内容。我不能在VS2008中使用Excel.Application
,而是使用了Microsoft.Office.Interop.Excel.Application
。
那么有没有别的办法呢?
Microsoft.Office.Interop.Excel.Application e = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
4条答案
按热度按时间6mzjoqzu1#
经过大约半天的练习,我终于找到了如何使它工作,这样你就可以锁定一个打开的Excel副本。我的用户一直强烈抱怨打开了太多的Excel示例。
下面是我为让它工作所做的一小段:
我已经追了一段时间了,终于有时间蹲下来想办法了。
ebdffaop2#
我也一直在Excel Addins工作,在命名空间使用
使用上面的代码行来代替Microsoft.Interop.Office.Excel,为了更好地理解,请查看我的代码:
kx7yvsdv3#
为了能够将Excel对象模型引用为“Excel”,您可以通过命名空间(或文档)顶部的
using
语句创建一个别名,如下所示:此后,您可以引用
Excel.Application
,而不是冗长的Microsoft.Office.Interop.Excel.Application
。至于为什么调用Marshal.GetActiveObject失败,我不能肯定地说。
(1)是否确定已存在正在运行的Excel示例?如果不是,请创建一个新的Excel应用程序:
(2)如果确实有一个Excel应用程序正在运行,并且Excel应用程序从未失去焦点,则可能是Excel示例尚未添加到运行对象表(ROT)中。请参阅:我相信Marshal.GetActiveObject方法在这种情况下应该抛出一个异常--而不是安静地返回null --但这似乎仍然有潜在的相关性。
我希望这能帮上忙...
麦克
6pp0gazn4#
请参阅下面链接中提供的MS KB ...
http://support.microsoft.com/kb/238610