我正在使用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
)。
答案 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。