Pregunta

Tengo una sencilla aplicación C # que tiene que escribir algunos valores en unos rangos de Excel de una hoja de trabajo específica. Puedo crear una instancia de aplicación de Excel, si no existe, pero si existen Quiero configurar activa y tomar una instancia si a utilizar en mi código.

Yo uso este código para crear una nueva aplicación:

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

Para obtener el identificador de ventana de Excel activo i utilizar esta API

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

¿Cómo puedo obtener una instancia de aplicación de Excel por un mango?

int hWnd = FindWindow(null, "Microsoft Excel - MySheet.xlsx");
Microsoft.Office.Interop.Excel app = ....(hWnd)
¿Fue útil?

Solución

Utilice el siguiente código para obtener la primera instancia en ejecución de Excel:

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

Ejemplo

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;
}

Otros consejos

Es posible que haya más de una instancia de Excel en ejecución.

GetActiveObject (...) busca en la tabla de objetos en ejecución (ROT) y le daría la última instancia de Excel que se abrió -. No necesariamente la que corresponde con el identificador de ventana que tiene

Usted está buscando AccessibleObjectFromWindow (..). El rel="noreferrer"> vincula en la otra respuesta muestra cómo utilizar esta función.

Otro vínculo - http://blogs.officezealot.com /whitechapel/archive/2005/04/10/4514.aspx .

Puede utilizar Marshal.GetActiveObject, consulte esta entrada del blog para más detalles:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top