Ver la Versión Completa : Unir archivos Excel
cmfab
17-07-2013, 00:08:16
Hola a todos, he estado revisando pero no encuentro respuesta de como hacer lo siguiente: Tengo 5 archivos de excel por separados y necesito unirlos en uno solo, osea algo como esto: generar un nuevo archivo que sea igual que el archivo 1, y de ahi en adelante crear 4 hojas mas en este nuevo archivo que van a contener cada hoja 1 de los restantes 4 archivos. Existe esta posibilidad ?, cabe resaltar que la estructura de los archivos es igual y cada uno de ellos solo contiene una hoja de datos
Gracias de antemano
Casimiro Notevi
17-07-2013, 00:54:59
¿Pero desde delphi?
cmfab
17-07-2013, 00:59:07
Si, no se si es posible pero lo necesitaria desde Delphi
saludos y gracias por el interés
Casimiro Notevi
17-07-2013, 01:38:20
Haz una búsqueda por los foros, creo recordar varios temas similares.
cmfab
17-07-2013, 01:46:36
Gracias nuevamente, encontre esta página en la web http://analisisydecision.es/truco-sas-unir-todos-los-excel-en-uno-solo/
mas abajo viene un codigo que quise transformar a Delphi, me quedo de esta forma
XL := CreateOleObject('Excel.Application');
XL.Workbooks.Open('prueba.xls');
XL.ActiveWorkbook.SaveAs('TodasJuntas.xls', -4143);
XL.Workbooks.Open('prueba1.xls');
XL.Workbooks('prueba1.xls').Sheets('prueba1').Copy (XL.Workbooks('TodasJuntas.xls').Sheets(1)) ;
XL.Workbooks('prueba1.xls').Close;
XL.Workbooks('TodasJuntas.xls').sheets(2).activate;
XL.Workbooks('TodasJuntas.xls').Save;
XL.Quit;
pero me da error y solo me graba el pruimer archivo prueba.xls, no se si adapté algo mal en el código
saludos
nlsgarcia
17-07-2013, 11:30:08
cmfab,
...Tengo 5 archivos de Excel por separados y necesito unirlos en uno solo...
Revisa este código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Consolida Hojas de Cálculo en un solo Libro de Trabajo
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.Name := 'None';
WrkS.SaveAs(FileExcelOutput,xlOpenXMLWorkbook);
// Consolida las hojas de cálculo del arreglo FileExcel en un solo Libro de Trabajo
for i := High(FileExcel) downto Low(FileExcel) do
begin
// Abre el Libro de Trabajo Consolidado
Excel.Workbooks.Open(FileExcelOutput);
// 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;
// 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);
// Salva WrkS Consolidado
WrkS.SaveAs(FileExcelOutput,xlOpenXMLWorkbook);
end;
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;
end.
El código anterior [I]genera un Libro de Trabajo Consolidado en Excel con la información de 6 hojas de cálculo (La primera hoja de cada una sin importar su estructura) por medio de Automatización de Excel con Delphi 7 y Excel 2010.
Espero sea útil :)
Nelson.
cmfab
17-07-2013, 15:11:19
Excelente, mil gracias es justo lo que necesitaba
Un saludo grande a todos
nlsgarcia
18-07-2013, 05:44:11
cmfab,
...justo lo que necesitaba...
Revisa este código:
// 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;
// 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 [I]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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.