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.