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
¿Cómo exportar listados DBF o Excel?
- Manuel Calomarde Gomez
- Posts: 6
- Joined: Wed Nov 09, 2005 12:00 pm
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, ) < 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.
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, ) < 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.
- Manuel Calomarde Gomez
- Posts: 6
- Joined: Wed Nov 09, 2005 12:00 pm
OK peroooo ¿DDE?
Hola
Muchas muchas gracias por la superrespuesta.
Solo una cosa ¿Que es DDE?
Un saludo
Muchas muchas gracias por la superrespuesta.
Solo una cosa ¿Que es DDE?
Un saludo
- Manuel Calomarde Gomez
- Posts: 6
- Joined: Wed Nov 09, 2005 12:00 pm
OK gracias perooo :-)
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
Muchisimas gracias a todos y un saludo
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: