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

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

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支持网站上提到的一个问题 – 但我已经明确启用了“导入模式”(正如您可以在上面的代码中看到的 – IMEX=1 )。

Execute方法不会像操作查询那样返回任何logging。 你可能想尝试OpenRecordset方法。

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

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

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

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

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

你可以在这里看到活的C#和VB示例,并在这里下载免费试用。

免责声明:我自己的SpreadsheetGear LLC

以及在连接string中使用IMEX=1 ,您需要查看几个registry项。 有关更多详细信息,请参阅SO上的此答案 。