CLOSE ALL
XL2007Import("c:\U.S. Extreme Temperatures.xlsx",.f.,.t.)
PROCEDURE XL2007Import
LPARAMETERS tcFullPathFile, tlHeaders, tlNull
LOCAL ARRAY aSheets[1]
SET DECIMALS TO 9
SET NULL OFF
&& [URL unfurl="true"]http://www.microsoft.com/downloads/details.aspx?FamilyID=7554f536-8c28-4598-9b72-ef94e038c891&DisplayLang=en[/URL]
IF VARTYPE(XL2007Import)="L"
tcFullPathFile = GETFILE('xlsx')
ENDIF
IF UPPER(RIGHT(tcFullPathFile,4))<>"XLSX"
RETURN -1
ENDIF
*DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=<<tcFullPathFile>>;Extended Properties="Excel 12.0";HDR=<<ICASE(tlHeaders,"YES","NO")>>;IMEX=1;MAXSCANROWS=65000;
TEXT TO m.cConnStr TEXTMERGE NOSHOW
DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=<<tcFullPathFile>>;HDR=<<ICASE(tlHeaders,"YES","NO")>>;
ENDTEXT
nHandle = SQLSTRINGCONNECT(m.cConnStr)
IF nHandle < 0
aerror(aa)
ENDIF
SQLTABLES(1,"TABLE","curXLSTbls")
SELECT DISTINCT table_name FROM curXLSTbls INTO ARRAY aSheets
USE IN SELECT("curXLSTbls")
ALEN(aSheets)
FOR nSheets = 1 TO 1&&ALEN(aSheets)
?aSheets[nSheets]
SQLCOLUMNS(nHandle,"["+ALLTRIM(aSheets[nSheets])+"]","native","curXLSCols")
SELECT DISTINCT column_name,ICASE(ISDIGIT(LEFT(column_name,1)),"_","")+column_name as column_alias,;
ordinal_position FROM curXLSCols ;
ORDER BY 2 INTO ARRAY aCols
nCols = ALEN(aCols,1)
IF nCols <= 254 &&continue
IF NOT tlNull
m.cSQL = "select "
FOR nCnt = 1 TO nCols
GO nCnt
m.cSQL = m.cSQL + '"' + ALLTRIM(aCols[nCnt,1]) + '"' + ;
ICASE(aCols[nCnt,1]=aCols[nCnt,2],""," as " + ALLTRIM(aCols[nCnt,2])) + ","
ENDFOR
m.cSql = LEFT(m.cSQL, LEN(m.cSQL)-1) + " from [" + ALLTRIM(aSheets[nSheets]) + "]"
ELSE
m.cSQL = "select * from [" + ALLTRIM(aSheets[nSheets]) + "]"
ENDIF
nResult = SQLEXEC(nHandle, m.cSQL, "temp")
IF nResult<1
AERROR(aWhatError)
_cliptext = m.cSQL
SET STEP ON
ENDIF
ELSE
MESSAGEBOX("Work to be done for >254 cols")
ENDIF
SELECT * FROM temp INTO TABLE (aSheets[nSheets])
USE
USE IN SELECT("curXLSTbls")
ENDFOR
USE (aSheets[1])
BROWSE NOWAIT
MESSAGEBOX("your data clean-up rountines etc here")
ENDPROC