我使用Microsoft Excel驱动程序将Excel文档导入到adodb.recordset中,这样我就可以删除重复的行并将其放入SQL Server数据库。
第一列具有192、13U、JJJ等值,但是由于某种原因,查询将其转换为双精度值,并且任何具有alpha值的行都将转换为Null。据我所知,这是因为多数类型是数字而不是文本。
我试着转换它,但得到一个错误。
下面是我的函数:
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$]"
时,我得到了这个错误
“查询表达式'cast(Code as varchar)‘中出现Microsoft语法错误(缺少运算符)。Microsoft OLE DB Provider for ODBC Drivers”
我尝试了varchar、varchar(10)和text作为转换类型,结果相同。
发布于 2011-02-04 16:57:04
尝试:
rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)
Cast在Jet/ACE SQL中不可用。
发布于 2011-02-04 17:08:19
我最终尝试了ACE连接字符串,而不是Microsoft Excel驱动程序的连接字符串。
sconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";"
并确保IMEX=1部分在里面。我认为Microsoft Excel驱动程序没有正确使用扩展属性。
https://stackoverflow.com/questions/4900418
复制相似问题