none
[VB 2008]Excel的資料進行比較後顯示在ComboBox中 RRS feed

  • 問題

  • 各位大大
    小弟有一個疑問
    當VB把Excel的檔案讀進來後
    針對某個欄位做資料比較
    取出欄位中所缺少的資料
    然後顯示在ComboBox讓使用者選取

    Ex:
    Excel
    欄位名稱:編號
    欄位資料:1,3,4,6,8,10

    經過VB比較後
    在ComboBox中可以看到"2,4,5,7,9"

    小弟目前發現VB讀進來的Excel檔案
    會把欄位資料改變成String
    而非Integer
    小弟要怎樣把它改成Integer來進行比較呢??

    開發環境:Win XP SP3+Visual Studio 2008
    2009年3月13日 上午 03:37

解答

所有回覆

  • 可以用 Cint函式將 String型別轉為integer型別
    或用Convert類別的ToInt32方法
    2009年3月13日 上午 04:53
    版主
  • 嗯...有點不是很懂

            Dim File_String As String = ("Provider=Microsoft.ACE.OleDb.12.0;" & "Data Source=" & Open_File_Info.Text & ";" & "Extended Properties=Excel 12.0")  
            Dim MyOleDb_cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(File_String)  
            Dim MyOleDb_cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("Select 歌曲編號 from[sheet1$]", MyOleDb_cn)  
            Dim MyData As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(MyOleDb_cmd)  
     
            MyData.Fill(MDS)  
     
            With Song_Number  
                .DataSource = MDS.Tables(0)  
                .DisplayMember = "歌曲編號" 
                .ValueMember = "歌曲編號" 
            End With  
     

    MDS是一個DataSet
    裡面存放著Excel檔的欄位資料
    現在有一個陣列"Number_Array"用來存放跟MDS比較後所缺的數值
    如果依據大大您的說法
    是必須要將MDS轉成Integer
    是吧??
    2009年3月13日 上午 05:30
  • 我有點誤會你的意思
    因為你說要把String改成 Integer
    所以你要用一個 Integer型別的陣列中的每個值去和MDS.Tables(0)中的"歌曲編號"欄位比較?
    其實不用轉型別也可以比
    如果要轉的話,當然是轉你要比的那個欄位值,而不是轉整個dataset
    簡單的方法就是迴圈取出來一個個比較
    ex:
           For i = 0 To 9  
                For Each xRow In MDS.Tables(0).Rows  
     
                    If CInt(xRow.Item("歌曲編號")) = Number_Array(i) Then  
                        '如果找到  
                    Else  
                        '如果沒找到  
                    End If  
                Next  
            Next  
     
    如果你個歌曲編號是個Key值
    也可以用
    DataRowCollection.Find 搭配 DataRowCollection.IndexOf來做判斷


    2009年3月13日 上午 06:27
    版主
  • 剛剛試了一下
    有個疑問
    當程式執行時
    出現了以下的畫面
    http://i192.photobucket.com/albums/z270/Wesley_Lai/001.jpg
    問題是我的Excel中並沒有Null的狀況啊
    有查了一下資料
    怎麼想也想不出把Excel讀進來後
    哪邊會出現Null
    請問大大們
    這是...那個環節有問題呢??

    code如下:
            Dim File_String As String = ("Provider=Microsoft.ACE.OleDb.12.0;" & "Data Source=" & Open_File_Info.Text & ";" & "Extended Properties=Excel 12.0")  
            Dim MyOleDb_cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(File_String)  
            Dim MyOleDb_cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("Select 歌曲編號 from[sheet1$]", MyOleDb_cn)  
            Dim MyData As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(MyOleDb_cmd)  
     
            MyData.Fill(MDS)  
     
            For Me.Number_Counter = 1 To 65536  
     
                For Each xRow In MDS.Tables(0).Rows  
     
                    If (CInt(xRow.Item("歌曲編號"))) <> Number_Counter Then  
                        Number_Array = Number_Counter 
                    End If  
     
                Next xRow  
                Song_Number.Items.Add(Number_Array)  
            Next Number_Counter  
        End Sub 
    2009年3月13日 上午 06:53
  • 你先用除錯模式看 MDS.Tables(0).Columns(0) 裡面的屬性吧~


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年3月13日 上午 07:41