FoxPro/Visual FoxPro - Problema al exportar a excel

 
Vista:

Problema al exportar a excel

Publicado por zurcaled (22 intervenciones) el 24/06/2010 15:25:04
Hola programadores, tengo un problema al exportar a excel, es muy lento como puedo hacer para que me mande los registros por rangos, por ejemplo tengo un excel que es de la columna "A" hasta la "M" y se llenan como 4mil filas, alguna idea?? que no sea copy to :D
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

RE:Problema al exportar a excel

Publicado por Juanma Cruz (5 intervenciones) el 24/06/2010 16:40:27
Lo normal sería hacer un COPY TO, o un EXPORT

La otra opción sería crear un objeto EXCEL.APPLICATION o EXCEL.SHEET pero no te dará mayor velocidad, sólo acceso y versatilidad ampliadas, además de poder saltar el límite de 65,535 filas que impone el COPY/EXPORT

La única pega es que el ordenador donde se ejecute el programa, deberá tener instalado Microsoft Office, si quieres que esto funcione.
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

RE:Problema al exportar a excel

Publicado por zurcaled (22 intervenciones) el 24/06/2010 16:59:20
claro, eso es lo que hago un excel.application, pero como comente es muy lento, quisiera que sea mas rapido, como hago para colocarlo en el excel por bloques (pintar los datos por rangos) , nose si me dejo entender???
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

RE:Problema al exportar a excel

Publicado por Juanma Cruz (5 intervenciones) el 24/06/2010 17:07:04
No me entero qué quieres decir con 'pintar los bloques'

¿Es necesario que todo el proceso de exportación se vaya mostrando en pantalla mientras ocurre?

Lo normal sería esconder la ventana y correr el proceso. Una vez finalizado éste, sólo entonces hacerla visible.
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

RE:Problema al exportar a excel

Publicado por zurcaled (22 intervenciones) el 24/06/2010 17:19:42
claro, mira te doy un ejemplo

tengo una tabla que tiene 3500 registros (un campo es el codigo), lo que hago es agrupar por codigo, si vemos el excel seria algo asi

----------A----------B----------C----------D----------E----------F----------etc
1codigo 1
2detalle1
3detalle1
4detalle1
5detalle1
6codigo2
.detalle2
.detalle2
.detalle2
.
.
.
etc
.
.
3500

lo que quiero es por grupo, es decir todo el codigo 1 pegarlo con su detalle (me entiendes)

y gracias por responder.
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

RE:Problema al exportar a excel

Publicado por Juanma Cruz (5 intervenciones) el 24/06/2010 17:32:01
Nada más que hacer, no hay una forma de hacerlo en bloques, como propones, si la hay no se conoce.
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

RE:Problema al exportar a excel

Publicado por zurcaled (22 intervenciones) el 24/06/2010 17:37:54
ok, gracias por tu tiempo, si tienes otra forma de hacerlo y que sea rapido agradeceria que me digas.

gracias
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

RE:Problema al exportar a excel

Publicado por es_binario (757 intervenciones) el 25/06/2010 00:01:18
Yo utilizo el siguiente codigo para enviar un pedido de mi cliente a excel y asi pueda modificarlo a su gusto, la idea es clara y el codigo esta lo suficientemente comentado segun mi propio gusto.

Lo que hace es abrir excel y crea un libro nuevo, y comienza a llenar las celdas con los datos de los registros basandose en un cursor pero que bien puede ser un tabla dbf.

espero te quede claro y sea lo que requerias.

*!* Envia los documentos a excel
*!* Autor: Vicor Hugo Navarrete N.

IF Thisform.chkSoloProductoCant.Value = 0
local Fila && Prepara la hoja de excel
wait'Espere Un Momento Exportando Datos' window nowait
_screen.mousepointer=14
TmpSheet=GetObject('','Excel.Sheet')
XLApp=TmpSheet.Application
XLApp.visible=.T.
XLApp.workbooks.add()
XLSheet=XLApp.ActiveSheet
*// encabezados del libro en excel *//

*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \

XLSheet.Cells(4,1)="Cant."
XLSheet.Cells(4,1).font.bold=.T.

XLSheet.Cells(4,2)="Código"
XLSheet.Cells(4,2).font.bold=.T.

XLSheet.Cells(4,3)="Articulo"
XLSheet.Cells(4,3).font.bold=.T.

*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \

XLSheet.Cells(4,5)="Cant."
XLSheet.Cells(4,5).font.bold=.T.

XLSheet.Cells(4,6)="Código"
XLSheet.Cells(4,6).font.bold=.T.

XLSheet.Cells(4,7)="Articulo"
XLSheet.Cells(4,7).font.bold=.T.
sele 1
Fila=5
DO CASE && Verifica la forma de seleccionar los datos para ser enviados
CASE Thisform.Optiongroup1.Value = 1 && Marzam
SELECT Articulos_a_solicitar.exp_1,;
Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
SELECT dEnv && Envia los datos
GO top
scan
XLSheet.Cells(Fila,1)=alltrim(dEnv.exp_1)
XLSheet.Cells(Fila,2)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,3)=dEnv.exp_5
Fila=Fila+1
endscan
CASE Thisform.optiongroup1.Value = 2 && Nadro

*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \

SELECT Articulos_a_solicitar.code_nadro,;
Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
*// \_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/\_/
*// / \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \
SELECT dEnv && Envia los datos
GO top
SCAN
IF MOD(RECNO(), 2) = 0
*// para un registro par *//
XLSheet.Cells(Fila,5)=dEnv.exp_5
XLSheet.Cells(Fila,6)=alltrim(dEnv.code_nadro)
XLSheet.Cells(Fila,7)=alltrim(dEnv.descrip)
Fila=Fila+1
ELSE
XLSheet.Cells(Fila,1)=dEnv.exp_5
XLSheet.Cells(Fila,2)=alltrim(dEnv.code_nadro)
XLSheet.Cells(Fila,3)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,4)="--"
Fila=Fila
ENDIF
ENDSCAN
CASE Thisform.optiongroup1.Value = 3 && otros
SELECT Articulos_a_solicitar.cve_prov,;
Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
SELECT dEnv && Envia los datos
GO top
scan
XLSheet.Cells(Fila,1)=alltrim(dEnv.cve_prov)
XLSheet.Cells(Fila,2)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,3)=dEnv.exp_5
Fila=Fila+1
endscan
ENDCASE
ELSE
local Fila && Prepara la hoja de excel
wait'Espere Un Momento Exportando Datos' window nowait
_screen.mousepointer=14
TmpSheet=GetObject('','Excel.Sheet')
XLApp=TmpSheet.Application
XLApp.visible=.T.
XLApp.workbooks.add()
XLSheet=XLApp.ActiveSheet
XLSheet.Cells(4,1)="Articulo"
XLSheet.Cells(4,1).font.bold=.T.
XLSheet.Cells(4,2)="Cant."
XLSheet.Cells(4,2).font.bold=.T.
XLSheet.Cells(4,4)="Articulo"
XLSheet.Cells(4,4).font.bold=.T.
XLSheet.Cells(4,5)="Cant."
XLSheet.Cells(4,5).font.bold=.T.
sele 1
Fila=5
SELECT Articulos_a_solicitar.descrip,;
Articulos_a_solicitar.exp_5;
FROM Articulos_a_solicitar;
WHERE Articulos_a_solicitar.pedir = .T. INTO CURSOR dEnv
*// comienza el envio de datos a nuetro libro en excel *//
SELECT dEnv
GO top
SCAN
*// la siguiente condicion, mand el informe en dos columnas
*//
IF MOD(RECNO(), 2) = 0
*// para un registro par *//
XLSheet.Cells(Fila,4)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,5)=dEnv.exp_5
Fila=Fila+1
ELSE
*// para un registro primo *//
XLSheet.Cells(Fila,1)=alltrim(dEnv.descrip)
XLSheet.Cells(Fila,2)=dEnv.exp_5
XLSheet.Cells(Fila,3)="--"
Fila=Fila
Endif
endscan
Endif
*//;
Ajusta Las celdas al tamaño de los datos;
*//
XLSheet.Range("A:A").font.name="Arial Narrow"
XLSheet.Range("A:A").font.size="10"
XLSheet.Range("B:B").font.name="Arial Narrow"
XLSheet.Range("B:B").font.size="10"
XLSheet.Range("C:C").font.name="Arial Narrow"
XLSheet.Range("C:C").font.size="10"
XLSheet.Range("D:D").font.name="Arial Narrow"
XLSheet.Range("D:D").font.size="10"
XLSheet.Range("E:E").font.name="Arial Narrow"
XLSheet.Range("E:E").font.size="10"
XLSheet.Range("F:F").font.name="Arial Narrow"
XLSheet.Range("F:F").font.size="10"
XLSheet.Range("G:G").font.name="Arial Narrow"
XLSheet.Range("G:G").font.size="10"

XLSheet.Columns("A:A").EntireColumn.AutoFit
XLSheet.Columns("B:B").EntireColumn.AutoFit
XLSheet.Columns("C:C").EntireColumn.AutoFit
XLSheet.Columns("D:D").EntireColumn.AutoFit
XLSheet.Columns("E:E").EntireColumn.AutoFit
XLSheet.Columns("F:F").EntireColumn.AutoFit
XLSheet.Columns("G:G").EntireColumn.AutoFit


*// Datos de la hoja, despues de ajustar las columnas;
para evitar que se ajuste a los nuevos campos;
*//
SET DATE long
XLSheet.Cells(1,1)="Fecha: " + DTOC(DATE())
XLSheet.Cells(1,1).font.bold=.T.
XLSheet.Cells(1,1).font.size="11"
XLSheet.Cells(1,1).font.name="Arial"
SET DATE short
_screen.mousepointer=0

Saludos desde Mexico.
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

RE:Problema al exportar a excel

Publicado por zurcaled (22 intervenciones) el 25/06/2010 16:19:02
Gracias es_binario, pero no es lo que buscaba, porque de esa forma tambien lo estoy haciendo, recorre celda por celda verdad???

y respecto a tu codigo esta parte:

Ajusta Las celdas al tamaño de los datos;
*//
XLSheet.Range("A:A").font.name="Arial Narrow"
XLSheet.Range("A:A").font.size="10"
XLSheet.Range("B:B").font.name="Arial Narrow"
XLSheet.Range("B:B").font.size="10"
XLSheet.Range("C:C").font.name="Arial Narrow"
XLSheet.Range("C:C").font.size="10"
XLSheet.Range("D:D").font.name="Arial Narrow"
XLSheet.Range("D:D").font.size="10"
XLSheet.Range("E:E").font.name="Arial Narrow"
XLSheet.Range("E:E").font.size="10"
XLSheet.Range("F:F").font.name="Arial Narrow"
XLSheet.Range("F:F").font.size="10"
XLSheet.Range("G:G").font.name="Arial Narrow"
XLSheet.Range("G:G").font.size="10"

XLSheet.Columns("A:A").EntireColumn.AutoFit
XLSheet.Columns("B:B").EntireColumn.AutoFit
XLSheet.Columns("C:C").EntireColumn.AutoFit
XLSheet.Columns("D:D").EntireColumn.AutoFit
XLSheet.Columns("E:E").EntireColumn.AutoFit
XLSheet.Columns("F:F").EntireColumn.AutoFit
XLSheet.Columns("G:G").EntireColumn.AutoFit

para evitar tanto codigo como lo estas haciendo por rangos porque no lo pones de esta manera:

XLSheet.Range("A:G").font.name="Arial Narrow"
XLSheet.Range("A:G").font.size="10"

XLSheet.Columns("A:G").EntireColumn.AutoFit

es una recomendacion, espero no incomodarte. Gracias de todas formas.

--
Saludos desde Lima - Perú
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

RE:Problema al exportar a excel

Publicado por es_binario (757 intervenciones) el 26/06/2010 06:25:53
Increible pero cierto, tengo como 3 años con este codigo funcionando esta aplicacion y no me habia dado cuenta del dato que me das.

Te agradezco mucho.

Un saludo.
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

RE:Problema al exportar a excel

Publicado por Pablo (Argentina) (433 intervenciones) el 25/06/2010 22:55:59
Hola Amigo, bueno he leido todas las ayudas que te han facilitado y ninguna e sirve se ve.
Bueno el tema es que si el COPY no lo queres y queres seguir usando la exportacion del modo excel.application o el getobject o sea creando vos la hoja y dandole formato a todo, con esa cantidad de registros va a ser lento.

La unica forma (al menos es la que yo conozco)) es que exportes de la misma forma que lo haces pero como TEXTO o sea no le des formato a las tablas, ni negrita, ni color, etc, etc, exporta la tabla o cursor tal cual, Eso no Demora, es rapido pero tiene ese incoveniente de la "estetica" de la hoja.

Espero haberte ayudado, Suerte!!!!!!

Pablo - Argentina
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

RE:Problema al exportar a excel

Publicado por walter (2 intervenciones) el 09/04/2015 20:56:05
Milton Vas gran prohombre de VISUAL FOX dijo:
usa el siguiente comando
copy to nombredearchivo.xls type FOX2X

yo he logrado enviar hasta 500000 registros
UN GENIO! del grupo de google de visualfoxpro en español
https://groups.google.com/forum/#!topic/publicesvfoxpro/QxC6qo51kvU
salud viva veron.
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