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

时间:2009-07-07 16:19:59

标签: excel vba excel-2007 ado

我正在使用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$]")

我只是得到一张满是Nulls的桌子。

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

我发现这里的ADO连接字符串令人难以置信的挑剔。我已经阅读了电子表格,但连接字符串略有不同:

  

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

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

答案 2 :(得分:1)

SpreadsheetGear for .NET可以阅读Excel工作簿,并且可以访问任何单元格,而不会遇到ADO可能遇到的各种问题/目标。

你可以看到现场C#& VB样本here并下载免费试用here

免责声明:我拥有SpreadsheetGear LLC

答案 3 :(得分:1)

除了在连接字符串中使用IMEX=1之外,还需要查看几个注册表项。有关详细信息,请参阅this answer on SO