esta es mi forma ( al la vieja..... )
Function Dbf2Excel( oPadre, cFileDbf, lSQL, cOtraTabla, aOtrosCampos )
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.