none
Ejecutar una macros con c# RRS feed

  • Pregunta

  •  

    Hola a todos,

     

    Estoy haciendo una aplicacion en la cual dentro de todo lo que tiene q hacer es ejecutar un modulo de una macros de excel, son algo asi como reportes que tienen que actualizarse diariamente, pero no tengo idea como lo puedo hacer, lo unico que lei por ahi es que tengo q agregar un par de referencias que ya las agregue, pero nada mas, a ver si me pueden ayudar con algun codigo pliz...

     

    Ojala me puedan ayudar...Gracias

     

    Saludos!

    lunes, 5 de mayo de 2008 21:57

Respuestas

  • Sería algo así:

    using System.Runtime.InteropServices;
    using Microsoft.Office.Interop;
    using Microsoft.Office.Interop.Excel;

    ...

    private void EjecutarMacro(string archivoExcel, string nombreMacro)
    {
                ApplicationClass excel;
                Workbooks books;
                _Workbook book;
                object missing;

                missing = System.Reflection.Missing.Value;

                excel = new ApplicationClass();
                excel.Visible = true;

                books = excel.Workbooks;
                book = books.Open(archivoExcel, missing, missing, missing, missing, missing, missing, missing, missing,
                                missing, missing, missing, missing, missing, missing);

                excel.GetType().InvokeMember("Run",
                    System.Reflection.BindingFlags.Default |
                    System.Reflection.BindingFlags.InvokeMethod,
                    null, excel, new object[] { nombreMacro });

                book.Close(false, missing, missing);
                Marshal.ReleaseComObject(book);
                Marshal.ReleaseComObject(books);
                Marshal.ReleaseComObject(excel);
                book = null;
                books = null;
                excel = null;
    }

    La referencia que tienes que agregar es a la Microsoft Office Object Library (o bien, Microsoft Excel Object Library), y es una referencia COM.

    Saludos.
    martes, 6 de mayo de 2008 15:35

Todas las respuestas

  • Sería algo así:

    using System.Runtime.InteropServices;
    using Microsoft.Office.Interop;
    using Microsoft.Office.Interop.Excel;

    ...

    private void EjecutarMacro(string archivoExcel, string nombreMacro)
    {
                ApplicationClass excel;
                Workbooks books;
                _Workbook book;
                object missing;

                missing = System.Reflection.Missing.Value;

                excel = new ApplicationClass();
                excel.Visible = true;

                books = excel.Workbooks;
                book = books.Open(archivoExcel, missing, missing, missing, missing, missing, missing, missing, missing,
                                missing, missing, missing, missing, missing, missing);

                excel.GetType().InvokeMember("Run",
                    System.Reflection.BindingFlags.Default |
                    System.Reflection.BindingFlags.InvokeMethod,
                    null, excel, new object[] { nombreMacro });

                book.Close(false, missing, missing);
                Marshal.ReleaseComObject(book);
                Marshal.ReleaseComObject(books);
                Marshal.ReleaseComObject(excel);
                book = null;
                books = null;
                excel = null;
    }

    La referencia que tienes que agregar es a la Microsoft Office Object Library (o bien, Microsoft Excel Object Library), y es una referencia COM.

    Saludos.
    martes, 6 de mayo de 2008 15:35
  •  

    Muchas Gracias, voy a probar como me va....
    martes, 6 de mayo de 2008 19:41
  • Francamente bueno.

     

    Gracias.

     

    martes, 20 de enero de 2009 12:30
  • Buenas,

    he creado una plantilla para crear un complemento office en el qual he introducido una cinta personalizada + un button

    la funcion del button sera ejecutar una macro ya instalada en el excel.

     

    He colocado el codigo en una clase.cs

    he realizado la llamada a la dicha clase apuntando al metodo EjecutarMacro y me obliga a poner el fichero de la clase.cs en Recurso Incrustado,

    el problema que tengo es que no puedo ver la clase !

    Si dejo el fichero en Compilacion tengo errores en el codigo que me has facilitado..

     

    ApplicacionClass Excel..

    Como lo he hacer ?

    Que tipo de proyecto e de generar?

    martes, 15 de marzo de 2011 8:24