Ayuda..Exportar cursor a Excel con más de 65.000 registros
Te mando este ejemplo.. la verdad lo que hago es lo siguiente:
1.- Creo mi archivo Excel, con titulos, y Titulos de Grupos Etc. ya formateados, Colores, Tipo de Letra Etc.
Luego barro la tabla y voy poniendo fila por fila, lo que siento es, que como son muchos registros se tardara demasiado al pasarlo a Excel, pero no se cada cuando pasas esa información.
Suerte ..
Saul HA
PRIVATE lcTextFile
lcTextFile = ''
xD = SYS(5)
_Archivo = 'ExposicionExcel'
lcTextFile = xd+"\Infohato\General\"+ _Archivo +".xlsx"
crutinaerroractual = ON("Error")
lhuboerror = .F.
ON ERROR LHUBOERROR = .T.
oexcel = CREATEOBJECT("Excel.Application")
ON Error &cRutinaErrorActual
IF lhuboerror
nresp = MESSAGEBOX("¿Desea generar una lista sin formato?", 35,"Excel NO esta instalado en esta computadora.")
IF nresp = 6
generacsv()
ENDIF
ELSE
generahojaelectronica()
ENDIF
RETURN
ENDPROC
** Si no Existe excel Quiere mandar a un Archivo
PROCEDURE GeneraCSV
carchivo = GETFILE("Hoja excel:XLS", ;
"Archivo Excel", ;
"Grabar", 0)
IF EMPTY(carchivo)
= MESSAGEBOX("Debe seleccionar un nombre de archivo.",64, "Error")
ELSE
COPY TO (carchivo) TYPE XLS
= MESSAGEBOX("El archivo fue grabado satisfactoriamente",0, "")
ENDIF
ENDPROC
**Cominesa a Generar la Hoja
PROCEDURE GeneraHojaElectronica
WAIT WINDOW NOCLEAR NOWAIT "Generando la hoja, espere un momento por favor."
oexcel.DisplayAlerts = .F. && Algo asi como SET SAFETY OFF
oexcel.workbooks.Open(lcTextFile)
WITH oexcel.worksheets(1)
SELECT * FROM CuR_Report;
ORDER BY clase_exp;
GROUP BY clase_exp;
INTO CURSOR _CurClases
j = 7
nCont = 1
jj = ''
SELECT _CurClases
GOTO TOP
DO WHILE !EOF()
cj = ALLTRIM(STR(j, 10,0))
.range("B" + cj).value = 'CLASE'
.range("C" + cj).value = _CurClases.Clase_exp+" "+_CurClases.DescripClase_exp
*-Letra para Titulos
.range("B" + cj + ":K" + cj).select()
WITH oexcel.selection
.font.name = "Times New Roman"
.font.size = 12
.font.bold = .T.
ENDWITH
j = j + 1
oexcel.Rows(j).Insert
oexcel.Rows(j).Insert
*-Letra para Renglones
j = j + 1
cj = ALLTRIM(STR(j, 10,0))
.range("B" + cj +":J" + cj).select()
WITH oexcel.selection
.font.name = "Calibri"
.font.size = 10
.font.bold = .F.
ENDWITH
** Barre la tabla en el Excel
SELECT CuR_Report
SET FILTER TO Clase_exp = _CurClases.Clase_exp
GOTO TOP
SCAN ALL
jj = ALLTRIM(STR(nCont,10,0))
cj = ALLTRIM(STR(j, 10,0))
*-Vaca
.range("B" + cj).value = "__________"
.range("C" + cj).value = jj
.range("D" + cj).value = CuR_Report.nombre_exp
.range("G" + cj).value = CuR_Report.registro_exp
.range("H" + cj).value = "'"+CuR_Report.codigo_exp
.range("I" + cj).value = CuR_Report.fechanac_exp
.range("J" + cj).value = SUBSTR(CuR_Report.nombrecriador,1,25)
j = j + 1
oexcel.Rows(j).Insert
*-Padre
cj = ALLTRIM(STR(j, 10,0))
.range("D" + cj).value = CuR_Report.nombreP_exp
.range("G" + cj).value = CuR_Report.padrereg_exp
.range("H" + cj).value = "'"+CuR_Report.padrecod_exp
.range("I" + cj).value = CuR_Report.tatuaje_exp
.range("J" + cj).value = SUBSTR(CuR_Report.nombrepropie,1,25)
j = j + 1
oexcel.Rows(j).Insert
*-Madre
cj = ALLTRIM(STR(j, 10,0))
.range("D" + cj).value = CuR_Report.nombreM_exp
.range("G" + cj).value = CuR_Report.madrereg_exp
.range("H" + cj).value = "'"+CuR_Report.madrecod_exp
j = j + 1
oexcel.Rows(j).Insert
oexcel.Rows(j).Insert
j = j + 1
nCont = nCont + 1
ENDSCAN
SELECT _CurClases
SKIP
j = j + 1
*-Aqui se aplica el saldo para hacer la entre linea
DO CASE
CASE _CurClases.Clase_exp = '06'
oexcel.Rows(j).delete
*oexcel.Rows(j).delete
j = j + 20
CASE _CurClases.Clase_exp = '12'
j = j + 22
CASE _CurClases.Clase_exp = '19'
j = j + 24
OTHERWISE
oexcel.Rows(j).Insert
ENDCASE
ENDDO
*-Quita una linea ultima
oexcel.Rows(j).delete
WITH .pagesetup
.printtitlerows = "$1:$5"
.firstpagenumber = -4105
.order = 1
.zoom = .F.
.fittopageswide = 1
.fittopagestall = 30
ENDWITH
.range("B6").select()
ENDWITH
*-Impresion
oexcel.visible = .t.
*!* oexcel.activeworkbook.printout()
*!* oexcel.application.quit
*-Desconectar
RELEASE oexcel
WAIT CLEAR
USE IN _CurClases
= MESSAGEBOX("La hoja fue generada satisfactoriamente.", 0, "")
ENDPROC
**