Ver Mensaje Individual
  #8  
Antiguo 18-07-2013
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
cmfab,

Cita:
Empezado por cmfab
...justo lo que necesitaba...
Revisa este código:
Código Delphi [-]
// Consolida Hojas de Cálculo en un solo Libro de Trabajo (Versión 2)
procedure TForm1.Button1Click(Sender: TObject);
const
   // Formato Open XML Workbook
   xlOpenXMLWorkbook =  51;

   // Arreglo de Hojas de Cálculo a Consolidar
   FileExcel : Array[1..6] of String = ('TestCopy-1.xls', 'TestCopy-2.xls',
                                        'TestCopy-3.xls', 'TestCopy-4.xls',
                                        'TestCopy-5.xls', 'TestCopy-6.xls');
var
   Excel, WrkS : OleVariant;
   Sheet, Range : OleVariant;
   FileExcelInput : String;
   FileExcelOutput : String;
   i : Integer;

begin

   // Ruta del Libro de Trabajo Consolidado
   FileExcelOutput := ExtractFilePath(Application.ExeName) + 'TestCopyAll.xlsx';

   try

      // Borra la versión previa del Libro de Trabajo Consolidado
      if FileExists(FileExcelOutput) then
         DeleteFile(FileExcelOutput);

      // Crea una instancia de Automatización de Excel
      Excel := CreateOleObject('Excel.Application');

      // Configura parámetros de ejecución de Excel
      Excel.DisplayAlerts := False;
      Excel.Visible := False;

      // Crea el Libro de Trabajo Consolidado
      Excel.Workbooks.Add(-4167);
      WrkS := Excel.Worksheets[1];
      WrkS.Activate;
      WrkS.Name := 'None';

      // Consolida las hojas de cálculo del arreglo FileExcel en un solo Libro de Trabajo
      for i := High(FileExcel) downto Low(FileExcel) do
      begin

         // Adiciona una hoja de cálculo vacía
         WrkS := Excel.Worksheets.Add();

         // Asigna un nombre a la hoja de cálculo
         WrkS.Name := 'Sheet-' + IntToStr(i);

         // Asigna una hoja de cálculo a consolidar como Input
         FileExcelInput := ExtractFilePath(Application.ExeName) + FileExcel[i];

         // Abre la hoja de Input
         Sheet := Excel.Workbooks.Open(FileExcelInput);

         // Copia todo el contenido de la hoja de Input (Solo la primera hoja de cálculo a efectos de este ejemplo)
         Range := Sheet.Worksheets[1].UsedRange.Copy;

         // Adiciona la hoja de Input en el Workbook de Output
         WrkS.Range['A1'].PasteSpecial(Range);

         // Cierra la hoja de Input
         Sheet.Close;

      end;

      // Remueve la hoja de cálculo de creación inicial del WorkBook
      Excel.WorkSheets['None'].Activate;
      Excel.WorkSheets['None'].Delete;

      // Posiciona el WorkBook en el primera Sheet
      Excel.Worksheets[1].Activate;

      // Salva WrkS Consolidado
      WrkS.SaveAs(FileExcelOutput,xlOpenXMLWorkbook);

      MessageDlg('Consolidado de Hojas de Cálculo de Excel Creado Satisfactoriamente', mtinformation, [mbok], 0);

   finally

      // Finaliza la automatización de Excel y libera recursos
      Excel.Quit;
      Excel := Unassigned;
      WrkS := Unassigned;
      Sheet := Unassigned;

   end;

end;
El código anterior es una variante más optimizada del código sugerido en el Msg #6 (Mejora el I/O y consumo de recursos de Excel).

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 18-07-2013 a las 04:51:24.
Responder Con Cita