我正在使用Microsoft Excel驱动程序将Excel文档导入adodb.recordset,以便我可以删除重复的行并将其放入SQL Server数据库。
第一列的值为192,13U,JJJ等,但由于某种原因,查询会将其转换为double值,并且任何具有alpha值的行都会转换为Null。据我所知,这是因为Majority类型是数字而不是文本。
我尝试了它,但是出错了。
这是我的功能:
Function Read_Excel(ByVal sFile As String) As ADODB.Recordset
On Error GoTo fix_err
Dim rs As ADODB.Recordset
rs = New ADODB.Recordset
Dim sconn As String
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic
sconn = "DRIVER=Microsoft Excel Driver (*.xls); ImportMixedTypes=Text; " & "DBQ=" & sFile & ";Extended Properties='Excel 8.0;HDR=No;IMEX=1';"
rs.Open("SELECT Code, Description FROM [sheet1$]", sconn)
tot += rs.RecordCount
rs.Close()
rs.Open("SELECT Distinct * FROM [sheet1$]", sconn)
Read_Excel = rs
rs = Nothing
Exit Function
fix_err:
Debug.Print(Err.Description + " " + _
Err.Source, vbCritical, "Import")
Err.Clear()
End Function
有没有办法轻松地将第一列作为文本?
编辑:当我尝试"SELECT cast(RPOCode as varchar(10)), Description FROM [sheet1$]"
时,我收到此错误
“[Microsoft] [ODBC Excel驱动程序]查询表达式'cast(代码为varchar)'中的语法错误(缺少运算符)。用于ODBC驱动程序的Microsoft OLE DB提供程序”
我已经尝试了varchar,varchar(10)和text作为具有相同结果的转换类型。
答案 0 :(得分:4)
尝试:
rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)
在Jet / ACE SQL中无法使用Cast。
答案 1 :(得分:0)
我最终尝试使用ACE连接字符串而不是Microsoft Excel Driver。
sconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";"
并确保IMEX = 1部分在那里。我认为Microsoft Excel驱动程序没有正确使用扩展属性。