代码之家  ›  专栏  ›  技术社区  ›  jwoolard

使用ADO从Excel中读取数据的空值

  •  4
  • jwoolard  · 技术社区  · 15 年前

    我正在使用ADO从Excel2007电子表格中读取数据。设置连接很容易:

    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$]")
    

    我只得到一张空桌子。

    这是关于 Microsoft Support site -但是我已经显式地启用了“导入模式”(正如您在上面的代码中看到的那样)- IMEX=1 )

    4 回复  |  直到 12 年前
        1
  •  3
  •   Marcand    15 年前

    Execute方法不返回任何记录,因为它用于操作查询。 您可能想尝试OpenRecordset方法。

    Dim rs As ADODB.recordSet
    Set rs = ado.OpenRecordset("SELECT * FROM [Current Work Load$]")
    
        2
  •  2
  •   Jeff Siver    15 年前

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

    provider=microsoft.ace.oledb.12.0;data source=“+filename+@”;extended properties=“excel 12.0;imex=1”;

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

        3
  •  1
  •   Joe Erickson    15 年前

    SpreadsheetGear for .NET 可以阅读Excel工作簿,并使您能够访问任何单元格,而无需使用ADO遇到的各种问题/情况。

    您可以看到实时C&vb示例 here 下载免费试用版 here .

    免责声明:我拥有SpreadsheetGear LLC

        4
  •  1
  •   Community CDub    8 年前

    以及使用 IMEX=1 在连接字符串中,需要检查两个注册表项。有关详细信息,请参阅 this answer on SO .