Foros del Web » Programación para mayores de 30 ;) » .NET »

parametros de respuesta al ejecutar VBA desde C#

Estas en el tema de parametros de respuesta al ejecutar VBA desde C# en el foro de .NET en Foros del Web. Hola, necesito buscar para cada archivo excel de una ListBox si contiene una cierta palabra. Lo hago mediante ejecutar una macro VBA para cada archivo ...
  #1 (permalink)  
Antiguo 21/12/2009, 07:07
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
parametros de respuesta al ejecutar VBA desde C#

Hola,

necesito buscar para cada archivo excel de una ListBox si contiene una cierta palabra. Lo hago mediante ejecutar una macro VBA para cada archivo excel que obtiene de la listbox. El único problema que tengo, es que consigo ejecutar la macro VBA pero nose como hacerlo para obtener los parámetros de retorno de esta macro. Necesito obtener de la llamada a la macro un booleano para saber si ha encontrado o no la palabra.

Mi código es:

private void Buscar_Click(object sender, EventArgs e)
{

// Comprovación que hay una palabra a buscar

if (Cadena.Text.Length == 0)
{

MessageBox.Show("Introduce la palabra buscar");
return;

}

// Creamos un archivo de texto para ir escribiendo los archivos excel que contienen la palabra

FileStream fs = File.Create(@"C:\Users\mgrau\Desktop\encontrados.t xt");
StreamWriter writer = new StreamWriter(fs);

int nItems = Llista.Items.Count;

// Comprovación que hay archivos en la lista para buscar

if (nItems == 0)
{

MessageBox.Show("No hay archivos Excel!");
return;

}

string path;

// Para cada archivo a buscar, nos conectamos con Excel y ejecutamos la Macro

for (int i = 0; i < nItems; ++i)
{

path = Llista.Items[i].ToString();

object oMissing = System.Reflection.Missing.Value;

Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
oExcel.Visible = true;
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook = null;
oBook = oBooks.Open(path, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);

// ejecución de la Macro

RunMacro(oExcel, new Object[] { "Buscar", Cadena.Text });

// Salimos de Excel y limpiamos

oBook.Close(false, oMissing, oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oBook);
oBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oBooks);
oBooks = null;
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComO bject(oExcel);
oExcel = null;

// Escribimos el archivo en un fixchero de texto (cuando la macro retorne el booleano sólo lo escribirá si ha encontrado la palabra)

writer.WriteLine(path);


}

// Cerramos el archivo

writer.Close();


}


// Ejecución de la MAcro
// Probablemente hay que modificar algun elemento de esta función

private void RunMacro(object oApp, object[] oRunArgs)
{
oApp.GetType().InvokeMember("Run",
System.Reflection.BindingFlags.Default |
System.Reflection.BindingFlags.InvokeMethod,
null, oApp, oRunArgs);
}



Muchas gracias por avanzado.

Saludos.

Marc
  #2 (permalink)  
Antiguo 23/12/2009, 10:55
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: parametros de respuesta al ejecutar VBA desde C#

Solucionado.

Era tan fácil como modificar la acción RunMacro de manera que:

private object RunMacro(object oApp, object[] oRunArgs)
{

Object res;

res = oApp.GetType().InvokeMember("Run",
System.Reflection.BindingFlags.Default |
System.Reflection.BindingFlags.InvokeMethod,
null, oApp, oRunArgs);


return res;

}

En el momento de tratar el objeto lo paso a booleano y ya está.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:53.