FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Esperar hasta que se cierre Excel
Estoy haciendo una aplicación que me genera un informe en Excel manejandolo a pelo Todo vá perfecto, imprimir sin mostrar excel, acceder a los datos, etc... el problema viene cuando formateo el informe y lo abro para que el usuario tenga vista previa, ahi se me descojona la apliación, ya que no se como hacer para que el programa espera hasta que el usuario cierre la hoja excel y así poder liberar correctamente la referencia a excel.
Utilizo el siguiente código para abrir Excel y mostralo:
salu2 |
#2
|
|||
|
|||
Ya lo he solucionado aunque realmente no espero a que cierre Excel, simplemente espero hasta que el usuario cierre todos los libros
Este sería el código definitivo:
Salu2 |
#3
|
|||
|
|||
Ejecutar aplicacion y esperar a que termine.
Hola yo utilizo la siguiente funcion para llamar a un programa externo y esperar hasta que termine.
Código:
function WinExecAndWaitEx(FileName: TFileName; TimeOut: DWORD): Boolean; var {$IFDEF WIN32} StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; ExCode,Res : DWORD; {$ELSE} hAppInstance: THandle; Msg : TMsg; aBuf : array[0..255] of Char; {$ENDIF} begin Result := False; {$IFNDEF WIN32} hAppInstance := WinExec(StrPCopy(aBuf, FileName), SW_NORMAL); if (hAppInstance < HINSTANCE_ERROR) then exit else repeat while PeekMessage(Msg, 0, 0, 0, pm_Remove) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; until (GetModuleUsage(hAppInstance) = 0); Result := True; {$ELSE} FillChar(StartupInfo, SizeOf(TStartupInfo), 0); with StartupInfo do begin cb := SizeOf(TStartupInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := SW_NORMAL; end; if CreateProcess(nil,PChar(FileName),nil,nil,False,NORMAL_PRIORITY_CLASS, nil,nil,StartupInfo,ProcessInfo) then begin Res := WaitforSingleObject(ProcessInfo.hProcess, TIMEOUT); if (Res = WAIT_TIMEOUT) then begin TerminateProcess(ProcessInfo.hProcess,0); CloseHandle(ProcessInfo.hProcess); Result := False; end else begin GetExitCodeProcess(ProcessInfo.hProcess, ExCode); CloseHandle(ProcessInfo.hProcess); Result := True; end; end; {$ENDIF} end; La llamo asi: Código:
Result := WinExecAndWaitEx(FileName,INFINITE); Saludos Fernando |
|
|
|