2008-10-23 46 views
0

我想從excel(2003)電子表格中使用vb6提取一個值表,其結果需要存儲在(adodb)記錄集中。該表是這樣的:使用vb6從excel中提取的忽略列

 
    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的價值觀行Name9Option.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 ActiveX數據對象2.8庫
  • MS ActiveX數據對象Recordset 2.8庫
  • 的MS Excel 11.0對象庫
  • MS數據綁定集合VB 6.0(SP4)

在這個問題上的任何幫助將不勝感激!

(1)出於某種原因,在列名稱中包含小數點時,會將其解釋爲#。


謝謝大家!中途試圖建立一個Schema.ini「編程」從KB155512onedaywhen的優秀post指出我朝着解決方案:

.Provider = "Microsoft.Jet.OLEDB.4.0" 
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 

我會鼓勵有類似問題的人閱讀帖子和評論,因爲有輕微的變化從一個人到另一個人的解決方案。

回答

1

你是對的:它基於多行猜測數據類型。您可以更改本地計算機註冊表項以影響所選的數據類型。有關更多詳細信息,請參閱this answer

+0

至少我是在場上。 +1 – Tomalak 2008-10-23 21:04:49

3

默認情況下,Excel ISAM驅動程序會查看您的第一行數據並猜測它們的數據類型。如果數據不符合初始假設(稍後在表格中),它會皺眉並將其變爲NULL。

您的MaxScanRows=0設置是此問題的關鍵。這聽起來像它會做正確的事情(掃描整個表的數據類型使用),但實際上並沒有。

查看onedaywhen的回答提供了更多的細節,我的第一個信息關於KB282263不是正確的建議。

+0

您鏈接的知識庫文章是用於文本文件,而不是Excel。 schema.ini文件不能與Excel結合使用(這是一種恥辱)。 – onedaywhen 2008-10-23 16:02:15

0

我可以給你的最好的建議是停止在VB6環境中使用它。打開Excel,按ALT + F11並加載VBA IDE。把你的代碼放在那裏。在此環境中,您可以訪問完整的Excel對象模型。

我見過很多人嘗試和以許多不同的方式與Excel交互,他們都有問題。使用VBA宏或Add-in方法是獲得數據的最佳方式。這就是微軟如何使Excel和Project與TFS集成。

有時候您需要重新考慮這個過程,以便這種方法適用。例如。您可能需要讓正在使用電子表格的用戶運行一個將數據從電子表格中移出的宏,而不是運行一個從電子表格中提取數據的進程,但通常它非常可行。

+0

該解決方案假設一個活躍的用戶,以及對用戶環境的一些控制措施。情況可能並非如此,特別是如果Excel僅僅被用作數據輸入機制(例如從各種入門人員收集50個電子表格)。的確,可以將VBA與工作簿/工作表/模板一起使用,但如果數據最終存放在各種數據庫(例如,世界各地的複製數據庫)中,則會變得更加複雜。此外,此解決方案假設Excel版本的同質性。 – 2010-09-30 11:24:31