Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Excel no es liberado de memoria al final de un proceso de automatización con Delphi (https://www.clubdelphi.com/foros/showthread.php?t=88916)

shoulder 26-08-2015 17:48:05

Excel no es liberado de memoria al final de un proceso de automatización con Delphi
 
Hola aunque use las sentencias que a continuacion escribire, si bien a la vista se cierra el archivo de excel con windows, pero si abro el administrador de tareas de windows veo como 20 excel.exe en los procesos (por cada vez que uso el excel desde delphi me queda un proceso colgado). Hay forma de cerrar completamente?.

Código Delphi [-]
appExcel := CreateOleObject('Excel.Application');
appExcel.WorkBooks.Open('C:\carpeta\hojas.xlsx');
appExcel.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

..........


appExcel.Workbooks.Close;
appExcel.Quit;
appExcel := Unassigned;

nlsgarcia 26-08-2015 20:31:35

shoulder,

Cita:

Empezado por shoulder
...cada vez que uso el Excel desde Delphi me queda un proceso colgado...¿Hay forma de cerrar completamente?...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ComObj, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DataExcel : Array[0..4] of string = ('Data-1.xlsx','Data-2.xlsx','Data-3.xlsx','Data-4.xlsx','Data-5.xlsx');

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
   xlOpenXMLWorkbook =  51;

var
   Excel, WrkS, WrkB : OLEVariant;
   Row, Col : Integer;
   Rows, Cols : Integer;
   i : Integer;
   FileExcel : String;

begin

   try
      Excel := GetActiveOleObject('Excel.Application');
   except
      Excel := CreateOleObject('Excel.Application');
   end;

   Excel.DisplayAlerts := False;
   Excel.Visible := False;

   for i := Low(DataExcel) to High(DataExcel) do
   begin
      FileExcel := ExtractFilePath(ParamStr(0)) + DataExcel[i];
      WrkB := Excel.Workbooks.Open(FileExcel);
      WrkS := WrkB.Worksheets[1];

      Cols := WrkS.UsedRange.Columns.Count;
      Rows := WrkS.UsedRange.Rows.Count;

      Randomize;

      for Row:= 1 to Cols do
         for Col:= 1 to Rows  do
            WrkS.Cells[Col,Row] := Random(1000);

      WrkS.SaveAs(FileExcel,xlOpenXMLWorkbook);
      WrkB.Close;

      WrkS := Unassigned;
      WrkB := Unassigned;
   end;

   Excel.Quit;
   Excel := Unassigned;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite por medio de automatización abrir, actualizar, salvar y cerrar 5 Workbooks de Excel, con una sola copia de Excel 2010 en memoria y liberar todos los recursos al final del proceso.

Revisa esta información:
Espero sea útil :)

Nelson.

shoulder 27-08-2015 19:23:07

Excel
 
Gracias era lo que me estaba fatando.

Código Delphi [-]
  Excel.Quit;    Excel := Unassigned;

gusspagano 06-07-2016 20:33:45

Sólo para agradecer a todos en este foro, aunque no preguntes nada encuentras solución a muchas cuestiones.

El código funciona a la perfección en window 10, con delphi XE8 y excel 2013.

Saludos. /,,/


La franja horaria es GMT +2. Ahora son las 13:12:34.

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