Ver Mensaje Individual
  #1  
Antiguo 20-09-2006
RaulChemical RaulChemical is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 59
Reputación: 21
RaulChemical Va por buen camino
No cerrar Excel

Hola Foro!!!!

Tengo cierto problemilla con mi carga desde Excel. Os cuento:

Realizo una carga desde un fichero excel y cuando llego al final del fichero cierro Excel.

Hasta aqui, no hay ningun problema, el caso es que si el usuario ya tenia abierto el excel antes, al finalizar mi carga, cierro mi fichero y el que ya tenia abierto el usuario.

Uso ExcelXP.

Os detallo como hago la creacion, apertura, cierre y liberacion del excel:

Para la creacion y apertura llamo al siguiente procedimiento:

Código Delphi [-]

Procedure CrearYConectarExcel(Fichero: String;
                              Var Lcid : Integer;
                              Var EXAplication : TExcelApplication;
                              Var EXWorkBook : TExcelWorkbook;
                              Var EXWorkSheet : TExcelWorksheet);
var
  wbk : _Workbook;
begin
  Lcid := LOCALE_USER_DEFAULT;
  EXAplication := TExcelApplication.Create(Application);
  EXWorkBook := TExcelWorkbook.Create(Application);
  EXWorkSheet := TExcelWorksheet.Create(EXWorkBook);
  wbk := EXAplication.Workbooks.Add(EmptyParam,LCID);
  EXWorkBook.ConnectTo(EXAplication.Workbooks.Open(fichero, EmptyParam, EmptyParam,
                                                   EmptyParam, EmptyParam, EmptyParam,
                                                   EmptyParam, EmptyParam, EmptyParam,
                                                   EmptyParam, EmptyParam, EmptyParam,
                                                   EmptyParam, EmptyParam, EmptyParam,
                                                   Lcid));
  EXWorkSheet.ConnectTo(EXWorkBook.ActiveSheet as ExcelWorkSheet);
  EXAplication.DisplayAlerts[Lcid];
end;

Y para el cierre y la liberacion hago esto:

Código Delphi [-]
Procedure CerrarYLiberarExcel(Fichero: String;
                              Var Lcid : Integer;
                              Var EXAplication : TExcelApplication;
                              Var EXWorkBook : TExcelWorkbook;
                              Var EXWorkSheet : TExcelWorksheet);
begin
  EXAplication.DisplayAlerts[LCID]:=False;
  EXWorkBook.Close(True,Fichero,emptyParam,LCID);
  EXWorkSheet.Disconnect;
  EXWorkBook.Disconnect;
  EXAplication.Quit;
  EXAplication.Disconnect;
  FreeAndNil(EXWorkSheet);
  FreeAndNil(EXWorkBook);
  FreeAndNil(EXAplication);
end;

El problema que tengo es que no se como hacer para que al CerrarYLiberarExcel(...) no se como hacer para que no se cierre el/los otro/s posible/s exceles abiertos.

He probado de momento quitando el EXAplication.Quit y el EXAplication.Disconect, pero al liberar el objeto, me cierra la aplicacion y si no libero, me suelta un RunTimeError de los que te suelta Excel.

¿Realmente se puede hacer que se cierre el excel que yo he abierto y que continue ejecutandose el otro excel?

Estoy pensando continuar por otra via, que es comprobar al principio de la ejecucion si excel está corriendo. En caso de que esté, soltarle un mensaje al usuario diciendole que Excel ya está en ejecucion.

¿Sabeis alguno como saber encontrar una tarea en ejecucion (en concreto el excel) dentro del administrador de tareas?.


Cualquiera de las opciones me es viable, tanto la "bonita" (solo cerrar mi fichero y que Excel continue en ejecucion) como la "drastica" (evitar mi porceso de carga si Excel esta en ejecucion).


Muchas gracias a todos.

Raul.
__________________
ash nazg durbatulûk
ash nazg gimbatul
ash nazg thrakatulûk
agh burzum-ishi krimpatul
Responder Con Cita