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

使用ADO从Excel读取数据的空值,excel,vba,excel-2007,ado,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从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$]")
我只是得到一个满是空值的表

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

可以阅读Excel工作簿,并允许您访问任何单元格,而不会遇到ADO可能遇到的各种问题/气候

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


免责声明:我拥有SpreadsheetGear LLC

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

Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+fileName+@”;扩展属性=“Excel 12.0;IMEX=1”


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

以及在连接字符串中使用
IMEX=1
,您需要查看几个注册表项。有关更多详细信息,请参阅。

执行方法不会像操作查询那样返回任何记录。 您可能希望尝试OpenRecordset方法

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

或HDR=否;这取决于是否有链接。链接已断开。注册表项解决方案还有其他来源吗?@sigil:我已将链接更改为另一个SO答案,该答案的内容与前面提到的博文(减去评论)相同。