忽略列使用维生素b6从excel
题
我想要取一个数值表,从一个excel(2003年)电子表格使用维生素b6中,其结果是需要将储存在一个(adodb)记录集。表看起来像这样:
Name Option.1 Option.2 Option.3 Option.4 Option.5 Option.6 ----------------------------------------------------------------- Name1 2 3 4 Name2 2 3 4 Name3 2 3 4 Name4 2 3 4 Name5 2 3 4 Name6 2 3 4 Name7 2 3 4 Name8 2 3 4 Name9 2 3 4 5 6 7
在连接和执行查询"SELECT * FROM [Sheet1$]
"或甚至是一列特定的,"SELECT [Option#6] FROM [Sheet1$]
"(见脚注1)和循环通过的结果,我给 Null
值行 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件数据对象的2.8库
- MS件记录集数据对象的2.8库
- MS Excel11.0对象的图书馆
- MS数据结合收集VB6.0(SP4)
任何帮助在这个问题上将非常感谢!
(1)由于某些原因,当包括一个小数点所列的名字,这被解释为一个#.
谢谢大家!过去一半在尝试建立一个 Schema.ini
"编程方式"从 KB155512 onedaywhen's优秀 后 指着我走向解决方案:
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
我会鼓励任何人都有类似问题的阅读和评论,因为有轻微的变化向解决方案,从一个人到另一个。
解决方案
你是正确的:这是猜测的数据类型的基于一些行。有地方机注册表的钥匙你可以改变的影响的数据的类型选择。更多详情,请参阅 这个答案.
其他提示
Excel ISAM驱动程序默认情况下看到的第一个把你的行和猜测他们的数据类型。应该有可(在后面的表格)的数据,不适合进入最初的假设,这皱眉头,并把它向空。
你的 MaxScanRows=0
设是关键,这个问题。这听起来像是会做正确的事情(扫描整个表中的数据使用的类型),但实际上它没有。
看看 onedaywhen's的回答进一步的细节,我的第一个信息 KB282263 是不正确的建议。
最好的建议我可以给你的是停止这样做在的维生素b6环境。开Excel,按ALT F11和载VBA IDE。把你的码在那里。从在这个环境中,你可以访问的全Excel对象的模式。
我见过很多人尝试和交互Excel在许多不同的方式,他们都有问题。使用VBA宏观,或添加在方法是最好的方式,我们发现获得的数据。这是Microsoft如何获得Excel和项目,以整合与TFS。
有时你需要重新思考过程为这种做法是合适的。E.g。你可能需要获得的用户使用的电子表格,以运行的宏观,这将推动数据的电子表格,而不是你在运行过程中提取数据从电子表格,但通常这是相当可行的。