>************************************************************ >* 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 >>
>>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