Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar hoja de Excel (https://www.clubdelphi.com/foros/showthread.php?t=87717)

newtron 16-02-2015 20:14:39

Cerrar hoja de Excel
 
Hola a tod@s.

Actualmente tengo resuelto el tema de exportación y manejo de Excel desde mi programa pero haciendo unos cambios me he dado cuenta de un pequeño "fleco".

En mi programa doy la opción de "Exportar y abrir" o de "Exportar y grabar", en el segundo caso creo el archivo excel, lo grabo, cierro excel y a volar pero en el primero que se abre excel con los datos exportados al cerrar excel se me queda abierta en memoria la hoja y no sé cuando cerrarla porque no puedo hacerlo después de la llamada para abrir el archivo puesto que se abriría y se cerraría de forma automática. ¿Qué pasa? pues que el usuario exporta y abre, maneja la hoja, cierra excel y vuelve al programa pero excel sigue estando abierto en memoria. Necesito ver si hay alguna manera de eliminar esa sesión de la memoria una vez cerrado excel.

¿A Alguien le ha surgido este problema?.

Gracias y un saludo

AgustinOrtu 16-02-2015 22:00:14

Uh, me pasaba lo mismo, en un, gracias a dios en una empresa que pretendian manejar ficheros excel desde el sistema, hasta que por suerte quedaron deprecados y nunca mas. Ni intente darle solucion, pero lo que yo hacia a mano era abrir el admin. de tareas y cerrar los procesos del excel. A lo mejor por ahi va la cosa, fijate si de alguna manera desde el Delphi te deja acceder a la lista de procedicimientos del sistema y cerrarlos (que poder estoy seguro de que se puede, habra que ver el tema de permisos)

A ver si alguien arroja mas luz al asunto

roman 16-02-2015 22:05:14

¿Código?

Digo, porque cuando uso esta opción que mencionas de abrir Excel con los datos, en el momento en que el usuario cierra la hoja, se libera el proceso. Yo hago algo parecido a esto:

Código Delphi [-]
var
  Excel: OleVariant;
  Libro: OleVariant;
  Hoja: OleVariant;

begin
  // Crear instancia de Excel
  //
  Excel := CreateOleObject('Excel.Application');
  Excel.DisplayAlerts := false;

  // Crear libro de trabajo basado en la plantilla
  //
  Libro := Excel.Workbooks.Open('\ruta\a\la\plantilla.xlt');
  Hoja := Libro.Worksheets[1];

  // Generar el reporte
  //
  GenerarReporte(Hoja);

  // Mostrar excel
  //
  Excel.Visible := true;
end;

// Saludos

roman 16-02-2015 22:12:16

Otra cosa:

El proceso de Excel no terminará hasta que las variables que hacen referencia a los objetos (Excel, Libro, Hoja, en el ejemplo) salgan de alcance, esto es, que temine su vida. Esto sucede de inmediato si dichas variables son locales a la rutina o método que haga el reporte.

// Saludos

newtron 17-02-2015 09:21:52

Cita:

Empezado por roman (Mensaje 488871)
Otra cosa:

El proceso de Excel no terminará hasta que las variables que hacen referencia a los objetos (Excel, Libro, Hoja, en el ejemplo) salgan de alcance, esto es, que temine su vida. Esto sucede de inmediato si dichas variables son locales a la rutina o método que haga el reporte.

// Saludos

Pues llevas razón, estoy tonto :o.

Efectivamente el proceso se libera solo cuando salgo del formulario, seguramente se me quedaban abiertos los procesos porque haciendo pruebas iba cortando el programa sin cerrarlo de forma "natural".

Gracias a los dos y un saludo.


La franja horaria es GMT +2. Ahora son las 23:40:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi