在C#中,我试图从Process对象获取Excel.Application对象的实例。这看起来应该很简单,但我无法弄明白,也无法找到一个例子。重复一遍,我有一个System.Diagnostics.Process对象,我知道它指的是一个正在运行的Excel实例。我现在需要恢复引用该进程的Microsoft.Office.Interop.Excel.Application对象,以便我可以从C#中操作Excel应用程序。
如果它更简单,我还有与活动Excel窗口关联的HWND ID和窗口文本。
感谢。
答案 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上测试过。