我正在尝试使用 vb6 从 excel (2003) 电子表格中提取值表,其结果需要存储在 (adodb) 记录集中。该表如下所示:
名称 Option.1 Option.2 Option.3 Option.4 Option.5 Option.6 -------------------------------------------------- --------------- 姓名1 2 3 4 姓名2 2 3 4 姓名3 2 3 4 姓名4 2 3 4 姓名5 2 3 4 姓名6 2 3 4 姓名7 2 3 4 姓名8 2 3 4 姓名9 2 3 4 5 6 7
在连接并执行查询“ SELECT * FROM [Sheet1$]
”甚至是特定于列的“ SELECT [Option#6] FROM [Sheet1$]
”(参见脚注 1)并循环遍历结果时,我得到Null
的是 row 的值Name9
-- Option.4
>Option.6
而不是正确的值 5、6 和 7 .似乎与电子表格的连接正在使用“最佳猜测”来确定有效的表限制是什么,并且只考虑了一组行数。
要连接到电子表格,我尝试了两个连接提供程序Microsoft.Jet.OLEDB.4.0
并MSDASQL
遇到了同样的问题。
以下是我使用的连接设置:
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=Excel 8.0;"
- - - - OR - - - -
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & filePath & ";MaxScanRows=0;"
.CursorLocation = adUseClient
.Open
End With
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute("SELECT [Option#5] FROM " & "[" & strTbl & "]")
仅当行数超过 8 行(不包括列名)时才会出现此问题,并且我已MaxScanRow=0
为MSDASQL
连接设置,但这产生了相同的结果。
我包括的值得注意的项目参考是:
- MS ActiveX 数据对象 2.8 库
- MS ActiveX 数据对象 Recordset 2.8 库
- MS Excel 11.0 对象库
- MS 数据绑定集合 VB 6.0 (SP4)
在这件事上的任何帮助将不胜感激!
(1) 出于某种原因,当列名中包含小数点时,它被解释为#。
谢谢大家!Schema.ini
在尝试从KB155512 onedaywhen的“以编程方式”设置“程序化”的过程中,出色的帖子将我指向了解决方案:
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
我会鼓励任何有类似问题的人阅读这篇文章和评论,因为从一个人到另一个人的解决方案略有不同。