Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to convert Excel 2007 to dbf
Message
General information
Forum:
Visual FoxPro
Category:
COM/DCOM and OLE Automation
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP SP2
Network:
Windows 2000 Server
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01337704
Message ID:
01372348
Views:
45
Here is a snippet of a function I use to import excel 2007 files
FUNCTION Excel2007Import( tcFile, tcItemAlias, tlStructureOnly )

LOCAL lnHandle, lcCmd, lnSuccess, lcConnStr, lcOldError, lcCursorName
LOCAL ARRAY laExcelError[1]

lnSuccess = 0

* according to MS you cannot enclose the path in quotation  marks for this connection string
IF LEFT( ALLTRIM( tcFile ), 1 ) == '"'
	tcFile = STRTRAN( tcFile, '"', "" )
ENDIF 

lcConnStr = "Driver= {Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Provider=Microsoft.ACE.OLEDB.12.0;DBQ=" + tcFile + ";Extended Properties=Excel 12.0 Xml;HDR=YES"

IF FILE( tcFile )
	
	* Attempt a connection to the .XLSX WorkBook.
	* NOTE: If the specified workbook is not found,
	* it will be created by this driver! You cannot rely on a
	* connection failure - it will never fail unless the xlsx driver is not on machine. 
	* So success is not checked here. Used FILE() instead.

	IF EMPTY( tcItemAlias )
		lcCursorName = "xlsxresult"
	ELSE
		lcCursorName = "c" + tcItemAlias
	ENDIF 
	
	lcOldError 	= ON( "ERROR" )
	llError = .f.
	ON ERROR llError = .t. 
	
	lnHandle = SQLSTRINGCONNECT( lcConnStr )

	IF lnHandle > 0

		* Connect successful if we are here. Extract data...
		IF tlStructureOnly
			lcCmd = "Select TOP 10 * FROM [Sheet1$]"  && if a million records it is stupid to pull in all for a structure check
		ELSE 
			lcCmd = "Select * FROM [Sheet1$]"
		ENDIF 
		
		USE IN SELECT( lcCursorName )
				
		lnSuccess = SQLEXEC( lnHandle, lcCmd, lcCursorName )
 		
		IF llError OR lnSuccess < 0
		    
		    	AERROR( laExcelError )
		    	PostLog( laExcelError[3] )
			lcCursorName = ""
              ENDIF

        ELSE
             lcCursorName = ""
             PostLog( "Unable to connect to file: " + tcFile )
        ENDIF 

RETURN lcCursorName
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform