none
●急●VB6匯入Excel的問題 RRS feed

  • 問題

  •   
    我的Excel內容只有2欄:品號、客戶品號
    內容大概為:
    品號
    DGG039NA, DGG040NA...DGB043NAQ, DGG035NA...
    客戶品號
    1101311, 1101313...1101421Q, 111331A...
    問題點:
    當用VB由Excel匯入table後,前面的品號ok,到DGB043NAQ(含)之後即抓不到客戶品號,一律為null,究其差異,是前段的客戶品號均為數字,而後段則有文字...
    若將原Excel檔內容全改為文字格式(就是數字一樣靠左),結果也是一樣,但若將前段刪除,只留後段,則可正常匯入客戶品號!
    請教先進,不知要如何改,才能一次全部正常地匯入?
    thanks!
     
    ps. VB程式如下:
        conExcel.ConnectionString = "Provider=MSDASQL.1;DSN=Excel Files;Persist Security Info=False;Driver={Microsoft Excel Driver(*.xls)};DBQ= " & txtExcelFile.Text
        conExcel.Open    
        sSQL = "SELECT * FROM [" & Trim(txtWorkSheet.Text) & "$]"
        rsExcel.Open sSQL, conExcel, adOpenStatic, adLockOptimistic
    2009年2月16日 上午 07:39

解答

所有回覆

  • 2009年2月17日 上午 03:10
  • 感謝tihs兄,差點打成了this了,哈!
    2009年2月17日 上午 06:46
  • 若是要同時處理各種型態,在第一行加入垃圾行比較好,比如說實數欄位,或是有 Empty 的欄位,同樣的方法也可以用在此例,客戶品號第一列用 a 這種字母來讓掃描自動判別為字串欄位。

    相關討論可參考先前站內的討論:
    http://www.google.com.tw/search?hl=zh-TW&q=Excel+%E5%9E%83%E5%9C%BE%E8%A1%8C+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F&meta=&aq=f&oq=
    2009年2月17日 上午 06:46
  • 感謝心冷熱情熄兄,
    我想,在第一列加入垃圾data,或將第一列數字data,加上單引號 ' ,都是個方法,但...因為是user操作匯入的,故要叫她們這樣做,恐怕...
    所以,我覺得,加上IMEX=1,似乎是較佳的方法,我想請問,IMEX=1有在哪本書或help上註明嗎?
    ps. 有人教我改用VBA的方式匯入
    優點:
    1. 不佔connecton
    缺點:
    1. 比ADO recordset方式慢
    2. 以xlsSheet.Rows.Count 得到的筆數為: 65535,而不是我要的(有資料的)筆數
    2009年2月17日 上午 07:22
  • HI,

    IMEX=1表示儲存格內容若是文字和數字混合的內容, 要當做文字處理

    tihs
    2009年2月18日 上午 02:37
  • 請問: IMEX=1 是為.NET專用? 我在VB6用是無效!
    thanks!
    2009年2月18日 上午 08:24
  • IMEX 的說明:http://support.microsoft.com/kb/194124
    您可以加入選項 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 不會使用任意。 這是 IMPORT 模式下所以結果可能會無法預期,如果您嘗試執行附加或更新這個模式中的資料。

    可能設定 IMEX:

    0 is Export mode 
    1 is Import mode
    2 is Linked mode (full update capabilities)




    這跟 VB 版本無關,也不涉及任何程式語言,但須注意你電腦 MDAC 及你使用 Jet 的版本。


    T.L. Cheng
    2009年2月18日 上午 11:23
    版主