Una de las limitaciones de MS-Excel (no así de VFP con su comando COPY TO .. TYPE XL5), es que no se pueden pasar más de 65,000 registros a la vez, el MVP VFP Cetin Basoz, nos ofrece una forma de resolver tal problema....
La técnica usada es crear un libro de MS-Excel, a partir de ahí, copiar desde el cursor a exportar, los registros necesarios para que puedan caber en una hoja, agregar a dicha hoja los registros copiados a un DBF.
Clear All * Create a test cursor Create Cursor testcursor (Rcno i,cType c(10), nType i, dType d) Rand(-1) For ix = 1 To 200000 && Create 200000 recs cursor Insert Into testcursor Values ; (Recco()+1,Sys(2015), Int(Rand()*1000), Date()-Int(Rand()*100)) Endfor Set Safety Off Wait Window Nowait "Por favor espere, enviando datos a Excel..." lnTotal = Reccount() oExcel = Createobject("Excel.application") With oExcel .Visible = .T. oMasterWorkBook = .workbooks.Add && Add a new workbook lnMaxRows = .ActiveWorkBook.ActiveSheet.Rows.Count && Get max row count lnNeededSheets = Ceiling( lnTotal / (lnMaxRows - 1) ) && 1 row header lnCurrentSheetCount = .sheets.Count If lnNeededSheets > lnCurrentSheetCount .sheets.Add(,.sheets(lnCurrentSheetCount),; lnNeededSheets - lnCurrentSheetCount) && Add new sheets after old ones Endif Endwith With oMasterWorkBook For ix = 1 To lnNeededSheets .sheets.Item(ix).Name = "Page "+Padl(ix,3,"0") Endfor lcExportName = Sys(5)+Curdir()+Sys(2015)+".dbf" For ix = 1 To lnNeededSheets lnStart = ( ix - 1 ) * (lnMaxRows-1) + 1 Copy To (lcExportName) ; for Between(Recno(),lnStart,lnStart+lnMaxRows-2) ; type Fox2x oSourceWorkBook = oExcel.workbooks.Open(lcExportName) .WorkSheets(ix).Activate oSourceWorkBook.WorkSheets(1).UsedRange.Copy(; .WorkSheets(ix).Range('A1')) oSourceWorkBook.Close(.F.) && Close w/o save Erase (lcExportName) Endfor .WorkSheets(1).Activate Endwith Wait Clear
PS:FoxyClasses dbf2Excel también usa otro método de transferencia via ADO, el cuál, puede completar el proceso aún si los datos tienen campos de tipo Memo.
Çetin Basöz
MS Foxpro MVP, MCP
http://www.foxyclasses.com
Traducido por: Esparta Palma
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.