¿Cómo exportar listados DBF o Excel?

Post Reply
User avatar
Manuel Calomarde Gomez
Posts: 6
Joined: Wed Nov 09, 2005 12:00 pm

¿Cómo exportar listados DBF o Excel?

Post by Manuel Calomarde Gomez »

Hola :-)

Pues nada, que tengo que poder exportar los listados de mi aplicación a Excel o a una DBF (preferiblemente a Excel).

¿Alguna forma o idea?

Gracias a todos :-) y un saludo
User avatar
dbzap
Posts: 189
Joined: Mon Nov 07, 2005 7:36 pm
Location: Chile
Contact:

Post by dbzap »

esta es mi forma ( al la vieja..... )

Function Dbf2Excel( oPadre, cFileDbf, lSQL, cOtraTabla, _ )
Local hExcel, oDDEs
Local Planilla, aNuevo, cCelda, xValor
Local cFileXls := Spac(250)
Local j, nRegistros, nCampos
Local cEjecut := "C:\MSOFFICE\EXCEL\Excel.Exe"
Local i := 0
Local lCerrarExcel := .F.
Local aTareas := GetTasks()
Local hStmt := 0
Local TMaes := {}
Local aResult := {}
Local nOpcion := 0
Local xCampos
Local qq := Chr(34)
MEMVAR DEFATMP

DEFAULT lSQL := .F.

If aScan( aTareas, {|x| "EXCEL.EXE" $ Upper(x) } ) > 0
* excel ya fue cargado en memoria
MsgStop(OemToAnsi("Debe cerrar Excel para realizar este proceso y luego continuar"),;
"Error de Operador")
Return NIL
EndIf

If !MsgGet( "Grabar en Archivo Excel...",;
OemToansi("Nombre de Salida (sin extension .xls)"),;
@cFileXls )
Return NIL
EndIf

cFileXls := AllTrim( cFileXls )
If File( cFileXls )
MsgStop("Nombre de archivo ya existe...","Error de Operador")
Return NIL
ElseIf Empty( cFileXls )
MsgStop("Nombre de archivo no corresponde...","Error de Operador")
Return NIL
EndIf

* parece que esta bueno
cFileXls := DEFATMP+"\"+cFileXls+".Xls"
SysRefresh()

oPadre:bDdeInit := {|hWndClient, cAppName, cTopicName| MsgBeep() }
oPadre:bDdeExecute := {|hWndClient, cCommand | &(cCommand) }

DEFINE DDE oDDEs ;
SERVICE "Excel" ;
TOPIC "System"

If aScan( aTareas, {|x| "EXCEL.EXE" $ Upper(x) } ) == 0
lCerrarExcel := .T.
If ( hExcel:= WinExec( cEjecut, 8) ) < 32
If hExcel > 0
MsgStop( "Excel no cargado..." )
Return Nil
Endif
EndIf
Else
lCerrarExcel := .F.
* excel ya fue cargado en memoria
EndIf

hExcel := GetWndTask(1)
If hExcel = Nil
MsgInfo( "Programa Excel no encontrado")
Return Nil
Endif

ACTIVATE DDE oDDEs
CursorWait()

Select (cFileDbf)
COPY TO _Dbf2Xls

oDDEs:Execute("[Open(" +qq+ DEFATMP+"\_Dbf2Xls.Dbf" +qq+ ")]")
oDDEs:Execute( "[Save.As(" +qq+ cFileXls +qq+ ",1)]" )

If lCerrarExcel
SendMessage( hExcel, WM_DESTROY )
EndIf
oDDEs:End()
oDDEs := Nil

CursorArrow()

Borrar( "_Dbf2Xls.dbf" )

Return NIL
//-----------------------------------

ademas viktor tomas tiene una clase re-buena para hacer conexion con excel, creo que se llama TFILEXLS.

Saludos y espero te sirva.
User avatar
Manuel Calomarde Gomez
Posts: 6
Joined: Wed Nov 09, 2005 12:00 pm

OK peroooo ¿DDE?

Post by Manuel Calomarde Gomez »

Hola :-)

Muchas muchas gracias por la superrespuesta.
Solo una cosa ¿Que es DDE?

Un saludo :-)
User avatar
dbzap
Posts: 189
Joined: Mon Nov 07, 2005 7:36 pm
Location: Chile
Contact:

Post by dbzap »

de lo que entiendo es Dinamic Data Exchange, o intercambio dinamico de datos....
ahora saber que es exactamente...mmmm dificil.

se que lo hace y eso me deja tranquilo un rato.
Saludos
User avatar
Canarias
Posts: 35
Joined: Thu Oct 06, 2005 10:00 pm
Location: Canary Islands - Spain

Post by Canarias »

DDE = Dynamic Data Exchange.
Intercambio Dinámico de Datos. Conjunto de especificaciones de Microsoft para el intercambio de datos y control de flujo entre aplicaciones.

Saludos
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Si estas trabajando a 16 bits utiliza la FileXLS de Ramon Avendaño, te genera archivos XLS nativos de Excel sin necesidad de DDE ni de OLE, es mas, no necesitas tener ni siquiera excel instalado.
Saludos
R.F.
User avatar
Manuel Calomarde Gomez
Posts: 6
Joined: Wed Nov 09, 2005 12:00 pm

OK gracias perooo :-)

Post by Manuel Calomarde Gomez »

OK, ya veo lo de DDE pero supongo que es necesaria una librería al respecto ¿o no?

Muchisimas gracias a todos y un saludo :-)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Manuel,

El DDE lo proporciona Windows automaticamente, de todas maneras, como te indica René, lo idóneo es usar la clase de Ramón que te evita tener que usar DDE, tener Excel instalado, etc. Pero ambas soluciones te servirán.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply