我想要取一个数值表,从一个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.0MSDASQL 并得到同样的问题。

这里是连接设置我的使用:

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=0MSDASQL 连接,但这已经产生相同的结果。

着名的项目引用我已经包括:

  • 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。你可能需要获得的用户使用的电子表格,以运行的宏观,这将推动数据的电子表格,而不是你在运行过程中提取数据从电子表格,但通常这是相当可行的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top