2009-07-07 111 views
4

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

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)。

回答

2

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

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

可以读取Excel工作簿并使您能够访问任何单元,而不会遇到可以与ADO一起运行的各种问题/流体。

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

声明:我自己的SpreadsheetGear LLC

2

我发现这里的ADO连接字符串是令人难以置信挑剔。我已阅读电子表格以正常工作,但连接字符串稍有不同:

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

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

+0

另一个好资源是http://www.connectionstrings.com – 2009-07-07 18:12:51

+0

或HDR = NO;这取决于是否有一个。 – 2010-10-22 02:21:11

1

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