PRB: Excel 傳回的值當作 NULL 使用 DAO OpenRecordset

文章翻譯 文章翻譯
文章編號: 194124 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

連線到使用 DAO OpenRecordset 方法的 Excel 試算表時, 某些 Excel 資料行中可能無法傳回值為 Null 當基礎值不為 Null 值。這通常會發生時數字,且文字資料型別混合相同的 Excel 資料行中。

發生的原因

這個問題是因為 Excel ISAM 驅動程式的限制所造成,因為一旦 Excel 資料行的資料型別,它決定,它會傳回 Null 值的資料型別 ISAM 驅動程式不是任何值已預設為該 Excel 資料行。Excel ISAM 驅動程式會藉由檢查第一個的幾個資料列中實際的值會決定 Excel 資料行的資料型別,並選擇代表大部分的中其取樣值的資料型別。

解決方案

有這種行為的兩個因應措施:
  1. 請確定在 Excel 中的資料輸入成文字。只重新格式化成文字的 [Excel] 欄不會完成這。您必須重新輸入現有的值之後重新格式化 [Excel 資料行。在 Excel,您可以使用 F5 重新輸入選定儲存格中的現有值。
  2. 您可以新增選項 IMEX = 1; 至 [Excel 連接 OpenDatabase 方法中的字串。例如:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    注意: 設定 IMEX = 1 會告訴要使用匯入模式驅動程式。在此的狀態登錄設定 ImportMixedTypes = 文字將會注意到。這會強制轉換成文字的混合的資料。這個穩定地運作您可能也必須修改登錄設定 TypeGuessRows = 8。此 ISAM 預設的驅動程式查看前 8 個資料列,並從該取樣會判斷資料型別。如果這八列取樣是所有數字再設定 IMEX = 1 不會將預設資料類型轉換成文字 ; 它會保留數字。

    您必須小心該 IMEX = 1 不會使用 indiscriminately。這是 IMPORT 模式所以結果可能會無法預測,如果您嘗試執行附加或更新這個模式中的資料。

    可能設定 IMEX:
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    上面所述設定的所在位置的登錄機碼是:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    請參閱本文的資訊參考一節上,當 Excel 試算表具有文字資料行行首以數字資料。

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

重製行為的步驟

若要重複這個問題,先建立與預設 Sheet1 試算表的 Excel 活頁簿。在 Sheet1 的第一欄,輸入下列值-123,aaa 456 bbb 789。在您的 c:\temp 目錄中儲存此活頁簿,並命名 Book1.XLS。

在 Visual Basic 中建立新的標準 EXE 專案,並請依照下列步驟執行:
  1. 請 Microsoft DAO 3.5 物件程式庫的參考。在 Visual 基本 6.0 會是 Microsoft DAO 3.51 物件程式庫。
  2. 將一個指令按鈕新增到新的表單。
  3. 在表單的一般宣告區段中放置下列程式碼:
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    藉由按下 F5 鍵執行該專案,並注意在偵錯] 視窗中列印文字值是為 Null。如果大部分的 Excel 試算表中值的文字,然後從上述程式碼結果會被回復。也就是數字的值會回來為 Null。

?考

如需詳細資訊請參閱 「 Microsoft 知識庫 」 中下列文:

190195: HOWTO: 從 Excel 工作表以 DAO 抽選資訊

屬性

文章編號: 194124 - 上次校閱: 2004年6月24日 - 版次: 4.0
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
關鍵字:?
kbmt kbprb KB194124 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:194124
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com