【问题标题】:Null values reading data from Excel using ADO使用 ADO 从 Excel 读取数据的 Null 值
【发布时间】:2009-07-07 16:19:58
【问题描述】:

我正在使用 ADO 从 Excel 2007 电子表格中读取数据。设置连接很简单:

Dim ado As ADODB.Connection
Set ado = CreateObject("ADODB.Connection")
ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myFilename.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
ado.Open

我可以调用ado.OpenSchema,而不会遇到任何问题。但是,当我尝试查询数据时:

Dim rs As ADODB.recordSet
Set rs = ado.Execute("SELECT * FROM [Current Work Load$]")

我只是得到一个满是 Null 的表。

这是在Microsoft Support site 上提到的一个问题 - 但我已明确启用“导入模式”(如您在上面的代码中所见 - IMEX=1)。

【问题讨论】:

    标签: excel vba excel-2007 ado


    【解决方案1】:

    Execute 方法不会像操作查询一样返回任何记录。 您可能想尝试 OpenRecordset 方法。

    Dim rs As ADODB.recordSet
    Set rs = ado.OpenRecordset("SELECT * FROM [Current Work Load$]")
    

    【讨论】:

      【解决方案2】:

      我发现这里的 ADO 连接字符串非常挑剔。我已经阅读了电子表格以工作,但连接字符串略有不同:

      Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + @";Extended Properties="Excel 12.0;IMEX=1";

      (我在 Excel 12.0 声明之后没有 XML)。

      【讨论】:

      • 或 HDR=NO;这取决于是否有一个。
      【解决方案3】:

      SpreadsheetGear for .NET 可以读取 Excel 工作簿并使您能够访问任何单元格,而不会遇到 ADO 可能遇到的各种问题/限制。

      您可以查看实时 C# 和 VB 示例here 并下载免费试用版here

      免责声明:我拥有 SpreadsheetGear LLC

      【讨论】:

        【解决方案4】:

        除了在连接字符串中使用IMEX=1,您还需要查看几个注册表项。详情请见this answer on SO

        【讨论】:

        • 链接已损坏。注册表项解决方案是否还有其他来源?
        • @sigil:我已将链接更改为另一个 SO 答案,其内容与上述博客文章相同(减去 cmets)。
        猜你喜欢
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多