una otra metodos metodo llamar funciones funcion firma extendidos ejemplos definicion como clase c# .net visual-studio-2008 vsto add-in

otra - metodos extendidos c#



¿Cómo llamar a un método VSTO AddIn desde un proyecto separado de C#? (4)

Supongo que su método Foo de alguna manera interactúa con Excel. De lo contrario, puede agregar una referencia al ensamblaje que contiene la clase con el método Foo y llamarlo desde allí sin instanciar Excel.

La única otra forma en que puedo pensar es obtener una referencia a su CommandBarButton a través del objeto excelApp. CommandBarButton tiene un método llamado Execute que es similar a hacer clic en el botón. Algo como esto:

Excel.Application excelApp = new Excel.Application(); CommandBarButton btn = excelApp.CommandBars.FindControl(...) as CommandBarButton; btn.Execute();

Tengo un proyecto de complemento Excel de C # "MyExcelAddIn" que tiene un método público Foo () para hacer algo complejo. Para fines de prueba, el complemento también define un botón de la barra de herramientas que está conectado a Foo (), así que puedo probar esto y verificar que al hacer clic en el botón llame a Foo () y haga lo que quiero que haga. Esto esta bien.

Ahora quiero llamar a este método desde un proyecto C # Windows Forms. En el proyecto de Windows Forms, puedo crear una instancia de Excel y hacerla visible y verificar que mi complemento VSTO se esté ejecutando, ya que puedo ver el botón y funciona. Pero no puedo encontrar la manera de llamar a Foo () programáticamente desde el proyecto de Windows Forms. He buscado en Google un poco y he llegado al punto de obtener el objeto COMAddIn "MyExcelAddIn", pero no sé cómo llamar a Foo ().

Se ve algo como esto:

// Create Excel and make it visible Application excelApp = new Application(); excelApp.Visible = true; // I know my VSTO add-in is running because I can see my test button // Now get a reference to my VSTO add-in Microsoft.Office.Core.COMAddIns comAddIns = _excelApp.COMAddIns; object addinName = "MyExcelAddIn"; Microsoft.Office.Core.COMAddIn myAddin = comAddIns.Item(ref addinName); // This works, but now what? How do I make a call on myAddin? // Note that myAddin.Object is null...

Así que quiero saber qué puedo hacer para llamar a Foo () desde mi aplicación Windows Forms. Tenga en cuenta que tengo control total sobre la aplicación Windows Forms y el complemento y sospecho que tengo que hacer cambios en ambos (particularmente el complemento) pero no tengo ni idea de cómo hacerlo.

Tenga en cuenta que esta es una aplicación VS2008 C # y estoy usando Excel 2003.


Estoy usando la API SendMessage Win32 para hacer esto. My C # Add-in crea una "NativeWindow" con un título de ventana único que la aplicación WinForm puede localizar.


Si está creando un complemento a nivel de aplicación, creo que esta podría ser su respuesta: Artículo de MSDN VSTO

Implica dos pasos: (Del artículo)

  1. En su complemento, exponga un objeto a otras soluciones.
  2. En otra solución, acceda al objeto expuesto por su complemento y llame a los miembros del objeto.

La otra solución puede ser: (De nuevo desde el artículo)

  • Cualquier solución que se ejecute en un proceso diferente al de su complemento (estos tipos de soluciones también se denominan clientes fuera de proceso). Estas incluyen aplicaciones que automatizan una aplicación de Office, como una aplicación de Windows Forms o consola, y complementos que se cargan en un proceso diferente.

Para cualquier otra persona que encuentre esto, esto es lo que hice:

object addInName = "AddinName"; var excelApplication = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application"); COMAddIn addIn = excelApplication.COMAddIns.Item(ref addInName); addIn.Object.AddinMethodName(params);

También tuve que agregar una referencia a Microsoft.Office.Core en COM y Excel.Interop en Assemblies.