Get instance of Excel application with C# by Handle

妖精的绣舞 提交于 2019-12-17 06:06:14

问题


I have a c# simple application that have to write some values in a excel ranges of a specific worksheet. I create an instance of Excel application if not exist, but if exist i want to set active it and take an instance if it to use in my code.

I use this code to create a new application:

Microsoft.Office.Interop.Excel app = 
   new Microsoft.Office.Interop.Excel.Application();
app.Visible = true;

To get the handle of active excel window i use this api

[DllImportAttribute("User32.dll")]
private static extern int FindWindow(String ClassName, String WindowName);

How can i get an instance of excel application by an handle?

int hWnd = FindWindow(null, "Microsoft Excel - MySheet.xlsx");
Microsoft.Office.Interop.Excel app = ....(hWnd)

回答1:


Use the following code to get the first running instance of Excel:

oExcelApp =  (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

Example

public Excel.Application StartExcel()
{
    Excel.Application instance = null;
    try
    {
       instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    }
    catch (System.Runtime.InteropServices.COMException ex)
    {
       instance = new Excel.ApplicationClass();
    }

    return instance;
}



回答2:


There might be more than one Excel instance running.

GetActiveObject(...) looks in the Running Object Table (ROT) and would give you the last Excel instance that was opened - not necessarily the one corresponding with the window handle you have.

You're looking for AccessibleObjectFromWindow(..). The Andrew Whitechapel post linked to in the other answer shows how to use this function.

Another link - http://blogs.officezealot.com/whitechapel/archive/2005/04/10/4514.aspx.




回答3:


You can use Marshal.GetActiveObject, see this blog post for details:

http://blogs.msdn.com/andreww/archive/2008/11/30/starting-or-connecting-to-office-apps.aspx



来源:https://stackoverflow.com/questions/1118735/get-instance-of-excel-application-with-c-sharp-by-handle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!