FoxPro/Visual FoxPro - Ayuda..Exportar cursor a Excel con más de 65.000 registros

 
Vista:

Ayuda..Exportar cursor a Excel con más de 65.000 registros

Publicado por Gaston (80 intervenciones) el 12/09/2012 15:57:30
Hola amigos, por favor necesito me de una mano a exportar datos de un cursor con mas de 65.000 registros a Excel, agregando formatos al excel.

Por ejemplo:
1- Agregar un titulo en la fila 1
2- Volcar los datos del cursor en la fila 3 (El cursor tiene mas de 65000 filas)
3- Uno de los campos del cursor tiene fechas, si estas son menores a hoy tiene que colorear la celda.
4- Por último tengo una columna con unidades, que me totalice la columna.

Desde ya muchas gracias.
Gastón.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda..Exportar cursor a Excel con más de 65.000 registros

Publicado por Saul (728 intervenciones) el 14/09/2012 02:22:37
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
**
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar