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?.
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 de shekomrqz
1