Mira si eso no funciono yo utilizaría el objeto excel. Algo como esto, fijate si te sirve
Try
*Instancio la DLL
loExcel = Createobject('Excel.Application')
*Trabajo sobre el objecto
With loExcel.Application
*Invible el archivo a abrir
.Visible = .F.
*Abro el archivo
.workbooks.Open("&lcRutaArh.")
*Cuento las columnas
lnCol = .ActiveSheet.usedrange.Columns.Count
*Le resto uno a la fila (Los nombre de los campos)
lnFil = .ActiveSheet.usedrange.Rows.Count - 1
*Recorro las filas desde la posiciòn 2 (donde empiezan los registros)
For lnj = 2 To lnFil
*Agrego un registro en blanco a la tabla
Select (xTabla)
Append Blank
*Recorro las columnas
For lni = 1 To lnCol
*Nombre del campo de destino
xcampo = .ActiveSheet.cells(1,lni).Value
*Se obtiene de la tabla el tipo de campo
xtipocampo = Type(xcampo)
*Tomo el valor de la celda
xvalor = .ActiveSheet.cells(lnj,lni).Value
Do Case
*Si el campo es fecha
Case xtipocampo="D"
*Si es fecha en blanco o en nulo
If Isnull(xvalor)
Replace &xcampo With Ctod(" / / ") In &xTabla
Else
*Inserto el valor
Replace &xcampo With Ttod(xvalor) In &xTabla
Endif
*Si es un campo char
Case xtipocampo="C"
*Por si en el excel el valor es entero
If Vartype(xvalor) = "N"
Replace &xcampo With Alltrim(Upper(Str(xvalor))) In &xTabla
Else
*Inserto el valor
Replace &xcampo With xvalor In &xTabla
Endif
*Si es numerico
Case xtipocampo="N"
*Si esta vacio inserto 0
If Isnull(xvalor)
Replace &xcampo With 0 In &xTabla
Else
*Inserto el valor
Replace &xcampo With Ttod(xvalor) In &xTabla
Endif
Endcase
Endfor
Endfor
*Cierro el archivo
.workbooks.Close
*Salgo del excel
.Quit
Endwith
*Limpio la variable
loExcel = .Null.
Release loExcel