************************************************************ * Function CombineExcelFiles ************************************************************ * Author............: VCS Developers Team * Project...........: Visual Collections System * Created...........: Craig Boyd 3/6/2006 23:55:50 * Copyright.........: (c) Jzanus, 2006 *) Description.......: * Calling Samples...: DIMENSION aXLSFiles(3) *!* aXLSFiles(1) = "C:\temp1.xls" *!* aXLSFiles(2) = "C:\temp2.xls" *!* aXLSFiles(3) = "C:\temp3.xls" *!* CombineExcelFiles(@aXLSFiles, "C:\XLSCombined.xls") * Parameter List....: * Major change list.: function CombineExcelFiles (taXLSFiles, tcDestination, tlDeleteOriginal) external array taXLSFiles local loExcel as Excel.application, ; loWorkBook as Excel.Worksbook, ; loWorkSheet , ; lnCounter, lcWorkSheetCaption, lcError, ; lcValidChars lcError = "" try lcValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " loExcel = newobject("Excel.Application") with loExcel .ScreenUpdating = .f. .DisplayAlerts = .f. .WorkBooks.add() lnCounter = 0 ** Delete all existing worksheets except 1 for each loWorkSheet in .WorkBooks(1).WorkSheets lnCounter = m.lnCounter + 1 IF m.lnCounter > 1 loWorkSheet.delete endif endfor for lnCounter = 1 to alen(taXLSFiles,1) if file(taXLSFiles[m.lnCounter]) lcWorkSheetCaption = juststem(taXLSFiles[m.lnCounter]) loWorkBook = .WorkBooks.open(taXLSFiles[m.lnCounter]) loWorkBook.WorkSheets(1).copy(null, ; .WorkBooks(1).WorkSheets(.WorkBooks(1).WorkSheets.count)) .WorkBooks(1).ActiveSheet.name = ; right(alltrim(chrtran(m.lcWorkSheetCaption, ; chrtran(m.lcWorkSheetCaption,m.lcValidChars,"")," ")), 31) &&loWorkBook.Name loWorkBook.close(.f.) && Don't save changes if m.tlDeleteOriginal erase (taXLSFiles[m.lnCounter]) endif endif endfor ** Remove the first original sheet from (Sheet1) .Workbooks(1).WorkSheets(1).Delete .WorkBooks(1).saveas(m.tcDestination) .ScreenUpdating = .t. .DisplayAlerts = .t. endwith catch to loError lcError = Log_Error(m.loError) finally if vartype(m.loExcel) = 'O' with loExcel .ScreenUpdating = .t. .DisplayAlerts = .t. .quit() endwith endif endtry if not empty(m.lcError) =ErrorMsg(m.lcError) endif return m.lcError endfunc>Something like that?
>DIMENSION MyExcelFiles[5] >MyExcelFiles[1] = "c:\XlsF1.XLS" >MyExcelFiles[2] = "c:\XlsF2.XLS" >MyExcelFiles[3] = "c:\XlsF3.XLS" >MyExcelFiles[4] = "c:\XlsF4.XLS" >MyExcelFiles[5] = "c:\XlsF5.XLS" > > > >FUNCTION CombineExcel(laExcelFiles, lcNewFileName) > LOCAL oExcel AS Excel.Application > LOCAL nXls, cActive, cNewBook > oExcel = CREATEOBJECT("Excel.Application") > oExcel.WorkBooks.New() > oExcel.WorkBooks.SaveAs(lcNewFileName) > cActive = oExcel.ActiveWorkbook.Name > FOR nXLS = 1 TO ALEN(laExcelFiles,1) > ** Because COPY TO XL produce only one sheet we must insert a new one here > oExcel.ActiveWorkbook.Sheets.Add() > oExcel.WorkBooks.Open(laExcelFiles[nXLS]) > cNewBook = oExcel.ActiveWorkbook.Name > oExcel.ActiveWorkbook.ActiveSheet.Cells.Select() > oExcel.Selection.Copy() > oExcel.Windows(oActive).Activate > oExcel.ActiveWorkbook.ActiveSheet.Paste() > oExcel.Windows(cNewBook).Activate > oExcel.ActiveWorkbook.Close() > oExcel.Windows(oActive).Activate > NEXT > oExcel.ActiveWorkbook.Save() > oExcel.Quit() > oExcel = NULL > RELEASE oExcel >RETURN >>Not tested
>>>oExcel = CREATEOBJECT("Excel.Application") >>>DIMENSION MyExcelFiles[5] >>>MyExcelFiles[1] = "c:\XlsF1.XLS" >>>MyExcelFiles[2] = "c:\XlsF2.XLS" >>>MyExcelFiles[3] = "c:\XlsF3.XLS" >>>MyExcelFiles[4] = "c:\XlsF4.XLS" >>>MyExcelFiles[5] = "c:\XlsF5.XLS" >>> >>>oExcel.WorkBooks.Open(MyExcelFiles[1]) >>>cActive = oExcel.ActiveWorkbook.Name >>>FOR nXLS = 2 TO 5 >>> ** Because COPY TO XL produce only one sheet we must insert a new one here >>> oExcel.ActiveWorkbook.Sheets.Add() >>> oExcel.WorkBooks.Open(MyExcelFiles[nXLS]) >>> cNewBook = oExcel.ActiveWorkbook.Name >>> oExcel.ActiveWorkbook.ActiveSheet.Cells.Select() >>> oExcel.Selection.Copy() >>> oExcel.Windows(oActive).Activate >>> oExcel.ActiveWorkbook.ActiveSheet.Paste() >>> oExcel.Windows(cNewBook).Activate >>> oExcel.ActiveWorkbook.Close() >>> oExcel.Windows(oActive).Activate >>>NEXT >>>oExcel.ActiveWorkbook.Save() >>>oExcel.Quit() >>>oExcel = NULL >>>RELEASE oExcel >>>>>>Something like that