Chào các anh chị trong diễn dàn GPE, em có vấn đề nhờ các anh chị giúp đỡ!!
Do đặc thu công việc của em, nên em phải thường xử lý vài trăm ngàn có khi tới cả triệu dòng dữ liệu, với dữ liệu lớn như vậy xử lý trên excel rất nặng, chậm và dễ bị treo, nên em phải chuyển dữ liệu excel sang foxpro, nhưng có vấn đề là khi em cài Excel 2013 trở xuống và Win 7 trở xuống thì import bình thường, nhưng khi em cài excel 2016 hoặc WIN 8.1, 10 thì lại không import được. Đây là code của em (code của foxpro):
LOCAL lcXLBook AS STRING, lnSQLHand AS INTEGER, ;
lcSQLCmd AS STRING, lnSuccess AS INTEGER, ;
lcConnstr AS STRING
CLEAR
SPATH=GETFILE('XLSx,xls', 'Select file', 'Select', 0, 'Select file')
lcXLBook = SPATH
lcConnstr = [Driver=] + ;
[{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ;
[DBQ=] +lcXLBook
IF !FILE(lcXLBook )
? [Excel file not found]
RETURN .F.
ENDIF
lnSQLHand = SQLSTRINGCONNECT( lcConnstr )
lcSQLCmd = [Select * FROM "SHEET1$"]
lnSuccess = SQLEXEC( lnSQLHand, lcSQLCmd, [xlResults] )
? [SQL Cmd Success:], IIF( lnSuccess > 0, 'Good!', 'Failed' )
IF lnSuccess < 0
LOCAL ARRAY laErr[1]
AERROR( laErr )
? laErr(3)
SQLDISCONNECT( lnSQLHand )
RETURN .F.
ENDIF
SELECT * FROM xlResults INTO TABLE newfile2010
SELECT newfile2010
FOR i=1 TO FCOUNT()
LOCAL ARRAY slen(i)
sfiel=ALLTRIM(FIELD(i))
SELECT newfile2010
DO CASE
CASE VARTYPE(&sfiel)='C' AND OCCURS('/',Sfiel)=2
ALTER table newfile2010 alter COLUMN &sfiel d(8)
CASE VARTYPE(&sfiel)='N'
REPLACE ALL &sfiel WITH 0 FOR ISNULL(&sfiel)
ALTER table newfile2010 alter COLUMN &sfiel n(15)
CASE VARTYPE(&sfiel)='C'
SELECT MAX(cd) slen FROM (SELECT &sfiel,LEN(&sfiel) cd FROM newfile2010) a1 INTO CURSOR a2
SELECT a2
GOTO 1
slen(i)=IIF(slen=0,1,slen)
ALTER table newfile2010 alter COLUMN &sfiel c(slen(i))
ENDCASE
SELECT newfile2010
endf
BROWSE NOWAIT
COPY TO d:\excel10
SQLDISCONNECT( lnSQLHand )
Em biết nó không kết nối được với [Driver=] + ;
[{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] nhưng không biết cách để xử lý!!!
Em không biết là excel 2016 và Win 8.1, 10 thì cái driver này có bị mất hay thay đổi vị trí không
Em không thể cài excel 2016 và Win 8.1, 10 vì nó ảnh hưởng tới công việc, mong các anh chị giúp đỡ!!
Vì có liên quan đến excel nên em đăng bài, mong các anh chị giúp đỡ!!! Em cám ơn các anh chị!!!
Do đặc thu công việc của em, nên em phải thường xử lý vài trăm ngàn có khi tới cả triệu dòng dữ liệu, với dữ liệu lớn như vậy xử lý trên excel rất nặng, chậm và dễ bị treo, nên em phải chuyển dữ liệu excel sang foxpro, nhưng có vấn đề là khi em cài Excel 2013 trở xuống và Win 7 trở xuống thì import bình thường, nhưng khi em cài excel 2016 hoặc WIN 8.1, 10 thì lại không import được. Đây là code của em (code của foxpro):
LOCAL lcXLBook AS STRING, lnSQLHand AS INTEGER, ;
lcSQLCmd AS STRING, lnSuccess AS INTEGER, ;
lcConnstr AS STRING
CLEAR
SPATH=GETFILE('XLSx,xls', 'Select file', 'Select', 0, 'Select file')
lcXLBook = SPATH
lcConnstr = [Driver=] + ;
[{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ;
[DBQ=] +lcXLBook
IF !FILE(lcXLBook )
? [Excel file not found]
RETURN .F.
ENDIF
lnSQLHand = SQLSTRINGCONNECT( lcConnstr )
lcSQLCmd = [Select * FROM "SHEET1$"]
lnSuccess = SQLEXEC( lnSQLHand, lcSQLCmd, [xlResults] )
? [SQL Cmd Success:], IIF( lnSuccess > 0, 'Good!', 'Failed' )
IF lnSuccess < 0
LOCAL ARRAY laErr[1]
AERROR( laErr )
? laErr(3)
SQLDISCONNECT( lnSQLHand )
RETURN .F.
ENDIF
SELECT * FROM xlResults INTO TABLE newfile2010
SELECT newfile2010
FOR i=1 TO FCOUNT()
LOCAL ARRAY slen(i)
sfiel=ALLTRIM(FIELD(i))
SELECT newfile2010
DO CASE
CASE VARTYPE(&sfiel)='C' AND OCCURS('/',Sfiel)=2
ALTER table newfile2010 alter COLUMN &sfiel d(8)
CASE VARTYPE(&sfiel)='N'
REPLACE ALL &sfiel WITH 0 FOR ISNULL(&sfiel)
ALTER table newfile2010 alter COLUMN &sfiel n(15)
CASE VARTYPE(&sfiel)='C'
SELECT MAX(cd) slen FROM (SELECT &sfiel,LEN(&sfiel) cd FROM newfile2010) a1 INTO CURSOR a2
SELECT a2
GOTO 1
slen(i)=IIF(slen=0,1,slen)
ALTER table newfile2010 alter COLUMN &sfiel c(slen(i))
ENDCASE
SELECT newfile2010
endf
BROWSE NOWAIT
COPY TO d:\excel10
SQLDISCONNECT( lnSQLHand )
Em biết nó không kết nối được với [Driver=] + ;
[{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] nhưng không biết cách để xử lý!!!
Em không biết là excel 2016 và Win 8.1, 10 thì cái driver này có bị mất hay thay đổi vị trí không
Em không thể cài excel 2016 và Win 8.1, 10 vì nó ảnh hưởng tới công việc, mong các anh chị giúp đỡ!!
Vì có liên quan đến excel nên em đăng bài, mong các anh chị giúp đỡ!!! Em cám ơn các anh chị!!!
Lần chỉnh sửa cuối: