使用 odbc excel 驱动程序转换数据类型

Posted

技术标签:

【中文标题】使用 odbc excel 驱动程序转换数据类型【英文标题】:Cast a data type with the odbc excel driver 【发布时间】:2011-06-21 11:42:20 【问题描述】:

我正在使用 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$]" 时出现此错误 “[Microsoft][ODBC Excel 驱动程序] 查询表达式 'cast(Code as varchar)' 中的语法错误(缺少运算符)。用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序” 我尝试了 varchar、varchar(10) 和 text 作为转换类型,结果相同。

【问题讨论】:

WHAT 你遇到了什么错误?!?!我们不是读心者 - 你需要让我们知道! "[Microsoft][ODBC Excel Driver] 查询表达式'cast(Code as varchar)'中的语法错误(缺少运算符)。Microsoft OLE DB Provider for ODBC Drivers" 我试过 varchar 和 text作为铸造类型。 【参考方案1】:

我最终尝试了 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 驱动程序没有正确使用扩展属性。

【讨论】:

【参考方案2】:

试试:

 rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)

Cast 在 Jet/ACE SQL 中不可用。

【讨论】:

这消除了错误,但我只是得到一个空字符串而不是 Null,就像它将 Null 转换为字符串一样。 关于 ACE 的那部分帮助我弄清楚了。我记得在connectionstrings.com/excel 上看到过,但没想过要尝试。

以上是关于使用 odbc excel 驱动程序转换数据类型的主要内容,如果未能解决你的问题,请参考以下文章

通用Excel设置MySQL外部数据源时提示:“ODBC驱动程序管理器未发现数据源名称并且未指定默认驱动程序”

ODBC 连接仅返回字符串作为数据类型

配置ODBC DSN数据源,导出数据库数据到Excel过程记录

Excel-VBA 通过 ODBC 驱动程序到 SQLite3:主数据库 + 附加数据库

Qt从excel导入数据-ODBC

如何在 Java 中使用 ODBC 将 Excel 文件导入 MySQL?