FoxPro/Visual FoxPro - Exportar a Excel una consulta o un cursor en VFP

 
Vista:

Exportar a Excel una consulta o un cursor en VFP

Publicado por Abraham AG (13 intervenciones) el 23/05/2011 17:52:46
Hola,

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 mas facil?, y como seria, agradezco la ayuda de ante mano

Saludos
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
sin imagen de perfil

Exportar a Excel una consulta o un cursor en VFP

Publicado por Juan Manuel Cruz (512 intervenciones) el 23/05/2011 19:30:01
Estas trasponiendo filas y columnas. Y asegurate de seleccionar primero el cursor correcto.

Esa ultima parte debería ser:

nCelda = 1
SELECT camiones2
Scan
XLSheet.Cells(nCelda,1).VALUE = 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
Thisform.Refresh


CREO....
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
sin imagen de perfil

Exportar a Excel una consulta o un cursor en VFP

Publicado por Juan Manuel Cruz (512 intervenciones) el 23/05/2011 19:31:05
nCelda debe empezar en 2, no en 1, se me pasó por alto.
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

Exportar a Excel una consulta o un cursor en VFP

Publicado por Abraham AG (13 intervenciones) el 23/05/2011 23:22:04
Hola,

En efecto es cierto lo de que estaba trasponiendo, esta corregido, ahora lo segundo veras se me presentaron 2 problemas.

El primero es que sigue repitiéndome siempre el mismo dato (el primer dato extraído) y el segundo parece ser que llega a un limite o algo así y me sale una ventana que dice "OLE error code 0x800ac472: Unknown COM status code"

Sera el segundo por que sobrepasa el limite o algo así?
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

Exportar a Excel una consulta o un cursor en VFP

Publicado por Abraham AG (13 intervenciones) el 23/05/2011 23:35:07
Parece que ya esta, pero sigo con el 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?
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

Exportar a Excel una consulta o un cursor en VFP

Publicado por Abraham AG (13 intervenciones) el 23/05/2011 23:43:02
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
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

Exportar a Excel una consulta o un cursor en VFP

Publicado por Abraham AG (13 intervenciones) el 23/05/2011 23:45:57
Y por ultimo, en está tabla llamada "Recamiones" tengo datos desde el añi 2009 hasta ahora 2012, como podria hacer en la consulta para que me traiga por ejemplo, solo los de año 2009?
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
sin imagen de perfil

Exportar a Excel una consulta o un cursor en VFP

Publicado por Juan Manuel Cruz (512 intervenciones) el 24/05/2011 10:43:57
Antes de empezar con el SCAN asegúrate de haber hecho

SELECT rCamiones

de lo contrario, tu tabla activa sigue siendo RECAMIO)NES q
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
sin imagen de perfil

Exportar a Excel una consulta o un cursor en VFP

Publicado por Juan Manuel Cruz (512 intervenciones) el 24/05/2011 10:46:53
Antes de empezar con el SCAN asegúrate de haber hecho

SELECT rCamiones
GO TOP
SCAN
*** bla bla bla...
ENDSCAN

de lo contrario, tu tabla activa sigue siendo RECAMIONES q era la tabla original. De ahí tus problemas en ese bucle.

Segundo, lee la documentación acerca de los límites de XLS.

Tercero, lee la documentación acerca de la sintaxis SQL.y la cláusula WHERE en particular.
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