4

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

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

这是Microsoft 支持网站上提到的一个问题- 但我已明确启用“导入模式”(如您在上面的代码中所见 - IMEX=1)。

4

4 回答 4

3

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

Dim rs As ADODB.recordSet
Set rs = ado.OpenRecordset("SELECT * FROM [Current Work Load$]")
于 2009-07-14T16:20:54.967 回答
2

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

提供者=Microsoft.ACE.OLEDB.12.0;数据源=“+文件名+@”;扩展属性=“Excel 12.0;IMEX=1”;

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

于 2009-07-07T17:58:02.137 回答
1

SpreadsheetGear for .NET可以读取 Excel 工作簿并使您能够访问任何单元格,而不会遇到 ADO 可能遇到的各种问题/限制。

您可以在此处查看实时 C# 和 VB 示例并此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-07-07T17:32:08.010 回答
1

除了IMEX=1在连接字符串中使用之外,您还需要查看几个注册表项。有关更多详细信息,请参阅SO 上的此答案

于 2009-07-13T23:15:30.317 回答