Problemas con Excel desde VC++

30/11/2004 - 16:37 por jose | Informe spam
Hola grupo,

Estoy desarrollando una aplicación VC++ con MFC.

En la aplicación genero unos informes que son ficheros excel.
Lo primero que hago en la aplicación es llamar a la función AfxOleInit(),
que se inicializa correctamente.
Luego, una vez seleccionado el tipo de informe, para generar el fichero
excel hago:

BOOL GenerarInforme()
{
BOOL bOk = FALSE;
_Application appExcel;
try
{
appExcel.CreateDispatch( "Excel.Application" );
appExcel.SetDisplayAlerts( FALSE );
// .
// .
// codigo que genera el informe
// y lo guarda en un fichero
bOk = TRUE;
}
catch( COleException *e )
{
// ProcesarExcepcion( e );
bOk = FALSE;
}
catch( COleDispatchException *e )
{
// ProcesarExcepcion( e );
bOk = FALSE;
}
appExcel.Quit();
return bOk;
}

El informe se genera a la perfección.
El problema es que cuando finaliza la generación del informe, el excel se
queda en memoria y tengo que utilizar el administrador de tareas para
eliminar el proceso.

¿alguna idea de qué es lo que puede pasar?

Un saludo y muchas gracias por vuestra atención,

Jose

Preguntas similare

Leer las respuestas

#6 Alberto
23/12/2004 - 19:28 | Informe spam
Y que haces dentro de tu funcion GenerarInforme()...


"jose" escribió en el mensaje
news:
Finalmente lo he conseguido de la siguiente forma:


1. Elimino la llamada a AfxOleInit()
2. Para llamar a GenerarInforme() utilizo el siguiente código:

HRESULT hRes = OleInitialize( NULL );
if( hRes != S_OK ) return;

GenerarInforme();

CoUninitialize();

Y el excel se libera de la memoria.

Saludos,

Jose


"Rodrigo Corral [MVP]" wrote in
news::

> Yo para automatización suelo usar los smart pointers de #import no los
> de MFC
>
> appExcel.GetActiveObject(__uuidof(Application)); //Por si ya esta
> activo excel
> if (appExcel == NULL)
> appExcel.CreateInstance(__uuidof(Application)); //Si no esta activo
>
> Y luego el Quit()
>
> No se si podrás probar algo similar con MFC
>

Respuesta Responder a este mensaje
#7 jose
04/01/2005 - 15:30 | Informe spam
Hola Alberto,

Siento no haber contestado antes, pero estaba de vacaciones.

La función tiene este contenido:

BOOL GenerarInforme()
{
BOOL bOk = FALSE;
_Application appExcel;
try
{
appExcel.CreateDispatch( "Excel.Application" );
appExcel.SetDisplayAlerts( FALSE );
// .
// codigo que genera el informe
// y lo guarda en un fichero
// .
bOk = TRUE;
}
catch( COleException *e )
{
// ProcesarExcepcion( e );
}
catch( COleDispatchException *e )
{
// ProcesarExcepcion( e );
}
appExcel.Quit();
return bOk;
}

Saludos,

Jose


"Alberto" wrote in news:#EfHY1R6EHA.2552
@TK2MSFTNGP09.phx.gbl:

Y que haces dentro de tu funcion GenerarInforme()...


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida