Saludos,
Prueba ese procedimiento, solo tienes que pegarlo en un prg vacio y ejecutarlo, si crees que te puede ser util es facil de adaptar a tu formulario.
*** Inicio Procedimiento
Local xlsName, dbfname, cpNum
*** Seleccionar Archivo XLS
xlsName = Getfile('XLS','Seleccionar')
If Empty(xlsName)
Return .F.
Endif
Local cConn, cTAbla, cCursor
*** Preparar el Driver ODBC
cConn = "Driver={Microsoft Excel Driver (*.xls)};"+;
"DriverId=790;Dbq="+xlsName+;
";DefaultDir="+Justpath(xlsName)+";"
*** Conectando al Libro de XLS
nH = Sqlstringconnect(cConn)
*** Cargando las hojas que tiene el libro
SQLTables(nH,"", "SheetNames")
** Selecciono la primera hoja del Libro XLS
Select SheetNames
If Reccount()>0
Go Top
Endif
** Cargar filas y columnas de la hoja seleccionada
cTAbla = Trim(SheetNames.Table_Name)
cCursor = Chrtran(cTAbla," $","_")
lok = SQLExec(nH,'Select * From ['+cTAbla+']','curTMPXLS') > 0
If lok
** Desconectar del libro XLS
SQLDisconnect(nH)
Use In SheetNames
** Rehacer cursor XLS con Número de Fila.
Select Recno() As fila, * From curTMPXLS Into Cursor curTMPXLS
** Convertir algunos campos memos del cursor a Caracter
Select curTMPXLS
Afield[campos]
For N=1 To Alen(campos,1)
If campos[n,2]= 'M'
cmdExec = Textmerge("CALCULATE MAX( LEN(<<campos[n,1]>>)) TO llong")
&cmdExec
campos[n,2]='C'
campos[n,3]=lLong
campos[n,4]=0
Endif
Endfor
Create Cursor curImported From Array campos
Select curImported
Append From Dbf('curTMPXLS')
GO top
Use In curTMPXLS
Release campos
Select curImported
BROWSE NOWAIT
ELSE
SQLDisconnect(nH)
Messagebox(aErrorArray[2],16,'Error..')
RETURN .f.
Endif
*** Fin Procedimiento