从Process获取Excel.Application对象或在.NET中获取hwnd

时间:2010-06-08 04:26:42

标签: c# excel

在C#中,我试图从Process对象获取Excel.Application对象的实例。这看起来应该很简单,但我无法弄明白,也无法找到一个例子。重复一遍,我有一个System.Diagnostics.Process对象,我知道它指的是一个正在运行的Excel实例。我现在需要恢复引用该进程的Microsoft.Office.Interop.Excel.Application对象,以便我可以从C#中操作Excel应用程序。

如果它更简单,我还有与活动Excel窗口关联的HWND ID和窗口文本。

感谢。

3 个答案:

答案 0 :(得分:2)

How to use Visual C# to automate a running instance of an Office program

using Excel = Microsoft.Office.Interop.Excel;
:    

private void button1_Click(object sender, System.EventArgs e)
{

    //Excel Application Object
    Excel.Application oExcelApp;

    this.Activate();

    //Get reference to Excel.Application from the ROT.
    oExcelApp =  (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

    //Display the name of the object.
    MessageBox.Show(oExcelApp.ActiveWorkbook.Name);

    //Release the reference.
    oExcelApp = null;
}

不确定您是否需要从Process类中检索应用程序对象?希望这会有所帮助。

答案 1 :(得分:2)

答案 2 :(得分:1)

我创建了一个可以遍历所有正在运行的Excel实例的类,还可以通过Hwnd,ProcessID或Process对象查找Application实例。

http://www.codeproject.com/Tips/1080611/Get-a-Collection-of-All-Running-Excel-Instances

答案基本上是对Win32 API的许多丑陋的外部调用,最好留在干净的公共接口后面。

尚未在所有版本的Excel或Windows上测试过。