shoulder,
Cita:
Empezado por shoulder
...cada vez que uso el Excel desde Delphi me queda un proceso colgado...¿Hay forma de cerrar completamente?...
|
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
public
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.