如何使用getActiveObject(“ Excel.Application”)

5 c# excel

我需要用C#完成一个应用程序。

现在,我想获得一个控制Excel文件获取数据的函数。

我用过getActiveObject("Excel.Application"),但这什么也没返回。我不能Excel.Application在VS2008 Microsoft.Office.Interop.Excel.Application中使用,而是改用了。

那么还有另一种方法吗?

Microsoft.Office.Interop.Excel.Application e = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
Run Code Online (Sandbox Code Playgroud)

Mik*_*lum 1

为了能够将 Excel 对象模型引用为“Excel”,您可以通过using命名空间(或文档)顶部的语句创建别名,如下所示:

using Excel = Microsoft.Office.Interop.Excel;
Run Code Online (Sandbox Code Playgroud)

此后,您可以参考Excel.Application而不是冗长的Microsoft.Office.Interop.Excel.Application

至于为什么您对 Marshal.GetActiveObject 的调用失败,我不能肯定地说。有几点想法:

(1) 您确定已经存在正在运行的 Excel 实例吗?如果没有,则创建一个新的 Excel 应用程序:

Excel.Application xlApp = new Excel.Application();
Run Code Online (Sandbox Code Playgroud)

(2) 如果确实有一个 Excel 应用程序已经在运行,那么如果 Excel 应用程序从未失去焦点,则该 Excel 实例可能还没有添加到运行对象表 (ROT) 中。有关详细信息,请参阅:附加到正在运行的 Office 应用程序实例的 Visual C# .NET 错误。我相信 Marshal.GetActiveObject 方法在这种情况下应该抛出异常——而不是悄悄返回 null——但这似乎仍然具有潜在的相关性。

我希望这有帮助...

麦克风