Ver Mensaje Individual
  #3  
Antiguo 05-09-2014
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
Roll462011,

Cita:
Empezado por Roll462011
...Necesito conocer si el libro de Excel en el que voy a poner datos ya está abierto, si es así utilizarlo sino es así abrirlo para utilizarlo ...


Revisa este código:
Código Delphi [-]
 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;
 
 type
   TForm1 = class(TForm)
     Button1: TButton;
     procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 uses ComObj, ActiveX;
 
 // Determina si Excel esta Instalado en la máquina
 function IsObjectAvailable(const ClassName: string): Boolean;
 var
   ClassID: TCLSID;
 begin
   Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID));
 end;
 
 // Determina si Excel tiene una Instancia Activa en la máquina
 function IsObjectActive(const ClassName: string): Boolean;
 var
   ClassID: TCLSID;
   Unknown: IUnknown;
 begin
   Result := False;
   if Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID)) then
     Result := Succeeded(GetActiveObject(ClassID, nil, Unknown));
 end;
 
 // Realiza Operaciones de Verificación, Apertura y Cierre en una Instancia de Excel
 procedure TForm1.Button1Click(Sender: TObject);
 var
    Excel : Variant;
    FileExcel : String;
    i : Integer;
    MsgApp : String;
    FileExcelOpen : Boolean;
 
 begin
 
    // Verifica si Excel esta instalado en la máquina
    if not IsObjectAvailable('Excel.Application') then
    begin
       MsgApp := 'Excel no esta Instalado en esta Máquina';
       MessageDlg(MsgApp,mtInformation,[mbOK],0);
       Exit;
    end;
 
    FileExcel := ExtractFilePath(Application.ExeName) + 'TestExcel.xlsx';
    FileExcelOpen := False;
 
    // Crea una instancia de Automatización de Excel
    if IsObjectActive('Excel.Application') then
       Excel := GetActiveOleObject('Excel.Application')
    else
       Excel := CreateOleObject('Excel.Application');
 
    // Configura parámetros de ejecución de Excel
    Excel.DisplayAlerts := True;
    Excel.Visible := True;
 
    if (Excel.Workbooks.Count > 0) then
    begin
       for i := 1 to Excel.Workbooks.Count do
       begin
          if Excel.Workbooks[i].Name = ExtractFileName(FileExcel) then
          begin
            MsgApp := Format('El Libro de Excel %s esta Abierto y sera Cerrado',[FileExcel]);
            MessageDlg(MsgApp,mtInformation,[mbOK],0);
            // Cierra el libro de Excel referenciado en el String FileExcel
            Excel.Workbooks[i].Close(True);
            FileExcelOpen := True;
            Break;
          end
       end
    end;
 
    if not FileExcelOpen then
    begin
       // Abre el libro de Excel referenciado en el String FileExcel
       if FileExists(FileExcel) then
       begin
          Excel.Workbooks.Open(FileExcel);
          MsgApp := Format('El Libro de Excel %s Fue Abierto',[FileExcel]);
          MessageDlg(MsgApp,mtInformation,[mbOK],0);
       end
       else
       begin
          MsgApp := Format('El Libro de Excel %s No Existe',[FileExcel]);
          MessageDlg(MsgApp,mtInformation,[mbOK],0);
       end;
    end;
 
    // Finaliza la automatización de Excel y libera recursos
    MsgApp := Format('Excel sera Finalizado',[FileExcel]);
    MessageDlg(MsgApp,mtInformation,[mbOK],0);
    Excel.Quit;
    Excel := Unassigned;

 end;
 
 end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, realiza diversas operaciones de verificación, apertura y cierre en una instancia de Excel 2010 por medio de Automatización en Excel.

Revisa esta información:
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 05-09-2014 a las 03:15:32.
Responder Con Cita