Para pasar de EXCEL a DBF se puede hacer por OLE.
El siguiente ejemplo es solo aplicable si estas usando FiveWin:
STATIC PROCEDURE LEER()
LOCAL oExcel, oHoja, nRows, nCols
LOCAL TCampos:={}, nRow, nCol
/* creamos conexion OLE con Excel */
oExcel := TOleAuto():New( "Excel.Application" )
? "objeto excel creado"
*oExcel:Visible := .T. // por si quieres ver la hoja abierta
/* abrimos el fichero de hoja de calculo */
oExcel:WorkBooks:Open(cGetFile("*.XLS", "Seleccione Fichero"))
?"hoja abierta"
/* seleccionamos la hoja actual*/
oHoja := oExcel:Get( "ActiveSheet" )
/* contamos cuantos renglones y cuantas columnas existen con datos */
nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()
/* creamos la estructura de la base de datos */
AADD(tCampos,{'CODCLI' ,'N', 3, 0}) // 1
AADD(tCampos,{'FECHA' ,'C',10, 0}) // 2
AADD(tCampos,{'REFERENC' ,'C',20, 0}) // 3
AADD(tCampos,{'TIPOMOV' ,'C', 1, 0}) // 4
AADD(tCampos,{'IMPORTR' ,'N', 11, 2}) // 5 le agregue 2 espacios mas
AADD(tCampos,{'CONCEPTO' ,'C',15, 0}) // 6
AADD(tCampos,{'EXPEDIEN' ,'N', 9, 0}) // 7
AADD(tCampos,{'AGENTE' ,'C', 4, 0}) // 8
AADD(tCampos,{'PETIVOLU' ,'C', 1, 0}) // 9
AADD(tCampos,{'FACTUDEVO' ,'C', 1, 0}) // 10
AADD(tCampos,{'PPREAGE' ,'C', 1, 0}) // 11
AADD(tCampos,{'SITUACION' ,'C', 1, 0}) // 12
AADD(tCampos,{'SALDO' ,'N', 11, 2}) // 13 le agregue 2 espacios mas
AADD(tCampos,{'ILOCALIZ' ,'C', 1, 0}) // 14
AADD(tCampos,{'FILLER' ,'C', 3, 0}) // 15
DBCREATE("IMPDIAR",tCampos)
/* abrimos la base de datos para colocarle los campos de excel*/
USE IMPDIAR
/* y ahora vamos leyendo celda por celda y colocando en campo de la DBF*/
FOR nRow := 2 TO nRows
APPEND BLANK
FOR nCol := 1 TO nCols
xValue := oHoja:Cells(nRow,nCol):Value
FieldPut(nCol,xValue)
SysRefresh()
NEXT
DBCOMMIT()
Memory(-1)
NEXT
oExcel:Quit()
oHoja:End()
oExcel:End()
MsgInfo( "Se ha creado el fichero PRUEBA.DBF" )
RETURN
Y para hacer lo contrario, pues nada, como dice Miguel, utilizar la clase FILEXLS de Ramon avendaño.