Ver Mensaje Individual
  #2  
Antiguo 26-08-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { 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.

Última edición por nlsgarcia fecha: 26-08-2015 a las 20:44:59.
Responder Con Cita