esta es una muy buena opcion, no recuerdo de donde la tome. pero es muy buena....
tiene un error que no he podido corregir esta al final del codigo
CLOSE TABLES all
Local lcXLBook As String, lnSQLHand As Integer, ;
lcSQLCmd As String, lnSuccess As Integer, ;
lcConnstr As String
lcXLBook = Getfile('xls, xlsx, xlsm, xlsb', 'Archivo:', 'Aceptar', 0, 'Seleccione una hoja de cálculo')
If Empty(lcXLBook)
Return .F.
Endif
If !File(lcXLBook)
Messagebox("Archivo no encontrado", 16)
Return .F.
Endif
Local oExcel As Excel.Application
m.oExcel = Createobject("Excel.application")
If Vartype(oExcel,.T.)!='O'
Messagebox("No se puede procesar el archivo porque no tiene la aplicación" ;
+ Chr(13) + "Microsoft Excel instalada en su computador.", 16)
m.oExcel = Null
Release oExcel
Return .F.
Endif
m.oExcel.Workbooks.Open(m.lcXLBook)
m.oExcel.Sheets(1).Select
Local oSheet As Object, lcSheet As String
m.oSheet = m.oExcel.ActiveSheet
m.oExcel.Quit()
m.oExcel = Null
Release oSheet, oExcel
lcConnstr = [Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=] + lcXLBook
lnSQLHand = Sqlstringconnect( lcConnstr )
lcSQLCmd = [Select * FROM "] + m.lcSheet + [$"]
lnSuccess = SQLExec( lnSQLHand, lcSQLCmd, [xlResults] )
If lnSuccess < 0
Local Array laErr[1]
Aerror( laErr )
Messagebox(laErr(3), 16)
SQLDisconnect( lnSQLHand )
Return .F.
Endif
Select xlResults
COPY TO q_Dat.dbf && Solucion Temporal
*--------- Parte con error.......
*** en esta seccion lo que se supone debe hacer es formatear exactamente la tabla que resulta de los datos de excel
*** falla.... ¿¿¿ alguien que lo pueda corregir y luego compartir ??
Select xlResults
lnCampos = Afields(laCampos)
For lnCampo = 1 To m.lnCampos
If m.laCampos[m.lnCampo, 2] == "M"
Select Max(Len(Evaluate(m.laCampos[m.lnCampo, 1])));
From xlResults;
Into Array laLen
laCampos[m.lnCampo, 2] = "C"
laCampos[m.lnCampo, 3] = m.laLen[1]
Endif
Endfor
* DISPLAY MEMORY
* CREATE TABLE res.dbf FROM ARRAY m.laCampos
* CREATE TABLE junk FROM ARRAY laJunk
Create Table Resultados.Dbf From Array laCampos
Insert Into Resultados Select * From xlResults
CREATE TABLE res.dbf FROM ARRAY m.laCampos
*!* Create Table Resultados.Dbf From Array m.laCampos
*!* Insert Into Resultados Select * From xlResults
*--------- parte con error.......
SQLDisconnect(lnSQLHand)
RETURN