Exportar a Excel una consulta o un cursor en VFP

Bueno quisiera saber si me podrían asistir con este pequeño problema con el que me eh topado, verán eh estado investigando como manipular objetos del tipo hojas de Excel con Visual Foxpro 9.0.
Eh logrado avances pero ahora quisiera saber como puedo exportar el resultado de una consulta realizada con instrucciones de SQL ya sea directamente con la consulta o almacenándola en un cursor y enviando el cursor hacia la hoja de Excel, eh estado intentando haciéndolo directo de la consulta pero se me hace un bucle infinito al momento de enviar los resultados hacia Excel, verán el código lo tengo de la siguiente forma:
******* 
Local nCelda &&Para in aumentando la fila, se supone que hacia abajo 
CLOSE TABLES ALL &&Cerrar tablas para evitar conflictos 
Use Recamiones In 0 Alias Recamiones Shared &&La tabla con la que trabajo 
Select Recamiones 
SELECT Recamiones.date, Recamiones.emb, Recamiones.ton, Recamiones.cli FROM Recamiones INTO CURSOR camiones2 READWRITE &&La consulta 
&& A partir de aquí creo el objeto de Excel con sus propiedades y todo 
tmpsheet = GetObject('','excel.sheet') 
XLApp = tmpsheet.application 
XLApp.ActiveWindow.DisplayZeros = .F. &&No muestra las celdas en valor 0 
XLApp.ActiveWindow.DisplayGridlines = .T. &&Muestra las líneas de división 
XLApp.Visible = .T. &&Aplicacion visible 
XLApp.WorkBooks.Add() &&Agrega una Hoja de calculo 
XLSheet = XLApp.ActiveSheet 
&& Empiezo a insertar en las filas los resultados generados por la consulta 
XLSheet.Columns("A:A").ColumnWidth=20.00 
XLSheet.Cells(1,1).VALUE='Fecha' 
XLSheet.Cells(1,2).VALUE='Embarque' 
XLSheet.Cells(1,3).VALUE='Toneladas' 
XLSheet.Cells(1,4).VALUE='Cliente' 
nCelda = 1 
Scan 
XLSheet.Cells(2,nCelda).VALUE = Recamiones.date 
XLSheet.Cells(3,nCelda).VALUE = Recamiones.emb 
XLSheet.Cells(4,nCelda).VALUE = Recamiones.ton 
XLSheet.Cells(5,nCelda).VALUE = Recamiones.cli 
nCelda = nCelda + 1 
EndScan
Thisform. Refresh
***** 
Ahora se me presentan algunos problemas con ese código pues verán, al parecer solo me la el primer campo de la tabla en vez de todo el conjunto de resultados y este me lo repite infinitas veces hacia la derecha y no hacia abajo (como si se tratara de una tabla), había pensado en algo como un "for i=o to valor total de la consulta" o algo así pero no tengo idea clara de como.
Podrían darme una mano, ¿si se hace con un cursor seria más fácil?.

1 respuesta

Respuesta
1
Cambiale esto
nCelda = 2
Scan
XLSheet.Cells(ncelda,1).VALUE = DTOC(Recamiones.date )
XLSheet.Cells(ncelda,2).VALUE =  Recamiones.emb 
XLSheet.Cells(nCelda,3).VALUE =  Recamiones.ton 
XLSheet.Cells(nCelda,4).VALUE = Recamiones.cli
nCelda = nCelda + 1
EndScan
Hola,
Parece que ya esta, pero sigo con un segundo problema, parece ser que si doy clic en otra fila o celda mientras extrae los datos el programa truena, el código quedo así:
Local nCelda
close tables all
Use Recamiones
SELECT Recamiones.date, Recamiones.emb, Recamiones.ton FROM Recamiones ORDER BY Recamiones.date INTO CURSOR Rcamiones READWRITE
&&Inicio de la creación y configuración del Objeto de Excel
tmpsheet = GetObject('','excel.sheet')
XLApp = tmpsheet.application
XLApp.ActiveWindow.DisplayZeros = .F. &&No muestra las celdas en valor 0
XLApp.ActiveWindow.DisplayGridlines = .T. &&Muestra las líneas de división
XLApp.Visible = .T. &&Aplicacion visible
XLApp.WorkBooks.Add() &&Agrega una Hoja de calculo
XLSheet = XLApp.ActiveSheet &&Abrir la hoja de calculo
XLSheet.Columns("A:A").ColumnWidth=20.00 &&Definición del ancho de la celda
XLSheet.Cells(1,1).VALUE='Fecha' &&Etiqueta "Fecha"
XLSheet.Cells(1,2).VALUE='Embarque' &&Etiqueta "Embarque"
XLSheet.Cells(1,3).VALUE='Toneladas' &&Etiqueta "Toneladas"
Select Rcamiones &&Tomo los resultados para desplegar los datos
nCelda = 2
Scan
XLSheet.Cells(ncelda,1).VALUE = Rcamiones.date &&Extraigo los datos desde el cursor y No desde la tabla
XLSheet.Cells(ncelda,2).VALUE = Rcamiones.emb &&Extraigo los datos desde el cursor y No desde la tabla
XLSheet.Cells(nCelda,3).VALUE = Rcamiones.ton &&Extraigo los datos desde el cursor y No desde la tabla
nCelda = nCelda + 1 
EndScan
Thisform.Refresh
También me tope con algo curioso y quisiera saber si me podrías iluminar mi duda, pues veras, estoy utilizando un GRID para mostrar los datos en el formulario antes de exportarlos Excel, esto para que el usuario se de una idea de los datos y después los mande exportar, estoy utilizando la misma consulta que te mostré en el código anterior, ¿pero eh notado ahí una gran gran diferencia (hablando de cantidad de datos) entre los datos que se muestran en el GRID y los datos que se empiezan a desplegar en la hoja de Excel y no logro entender por que si es la misma consulta a la misma tabla y todo
A que se deberá?, ¿Tiene alguna solución?
También otra dudita en esta parte, pues me llamo la atención, ¿y es el sabe como sabe la variable nCelda que ya llego a su fin o que al consulta ya se "vació"?
Scan
XLSheet.Cells(ncelda,1).VALUE = Rcamiones.date &&Extraigo los datos desde el cursor y No desde la tabla
XLSheet.Cells(ncelda,2).VALUE = Rcamiones.emb &&Extraigo los datos desde el cursor y No desde la tabla
XLSheet.Cells(nCelda,3).VALUE = Rcamiones.ton &&Extraigo los datos desde el cursor y No desde la tabla
nCelda = nCelda + 1 
EndScan
Thisform.Refresh
Y por ultimo, en está tabla llamada "Recamiones" tengo datos desde el añi 2009 hasta ahora 2012, como podría hacer en la consulta para que me traiga por ejemplo, ¿solo los de año 2009?
A ver si te puedo ayudar.
El código que mandaste a mi marco un error al asignar la fecha:
XLSheet.Cells(ncelda,1).VALUE = Rcamiones.date
por eso yo le puse dtoc(Rcamiones.date) y se quito el error.
Lo del GRID revisa nada más que tabla esta tomando, esta medio difícil decirte sin poder ver que ocurre. Y lo que dices que truena, si me puedes mandar el error a ver que puede ser.
por de los años de los recamiones puedes hacer el SCAN con la opcioo FOR
alog asi como
SCAN for year(rcamciobnes.date)=2009
Saludos
Te dejo mi messenger
[email protected]
Muchas gracias por tu tiempo y paciencia, aún no termino y sigo on varias trabas, pero eh avanzado mucho gracias a ti, espero poder seguir contando con tu ayuda y me pongo a tu entera disposición cuando necesites algo de mi.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas