从Process或hwnd获取Excel.Application对象

在C#中我想从一个Process对象中获取一个Excel.Application对象的实例。 这似乎应该是非常简单,但我不明白,找不到一个例子。 重复,我有一个System.Diagnostics.Process对象,我知道是指一个正在运行的Excel实例。 我现在需要恢复引用该进程的Microsoft.Office.Interop.Excel.Application对象,以便可以从C#中操作Excel应用程序。

如果它使得它更简单,我也有活动的Excel窗口相关的HWND ID和窗口文本。

谢谢。

在另一个SOpost上回答:

如何使用进程ID获取Excel实例或Excel实例CLSID?

如何使用Visual C#自动运行Office程序的实例

 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类中检索应用程序对象? 希望这可以帮助。

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

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

答案基本上是很多丑陋的外部调用的Win32 API,最好留在一个干净的公共界面背后。

这尚未在所有版本的Excel或Windows上进行testing。