如何在vb.net中将一栏MS Excel数据放入数组中

时间:2018-07-12 14:21:18

标签: vba vb.net excel-vba

enter image description here

我的MS.Excel电子表格中有数据,其中包含不同的列(Sn,金额和技术ID)。我试图将所有技术ID的数据放在技术ID中,例如:-

  mydata = [43219 , 43220 , 43221 , 43222 ,43223 ,43224 , 43225 ]

我的代码只有一个主要处理功能:-

导入:-

 Imports System.IO
 Imports System.Data.OleDb

主要处理功能:-

Dim conString1 As String
Dim Mydata(200) As Integer
Dim connection As OleDbConnection
Dim adapter As OleDbDataAdapter

Private Sub LoadData(conStr As String)
    con = New OleDbConnection(conStr)
    Dim query As String = "SELECT * FROM [Sheet0$]"
    adapter  = New oleDbDataAdapter(query, connection)

    'Putting data indide array
    'For intCount = 0 To lengthofcolumn 
          'Mydata(intCount) = ?
    'Next intCount

    Debug.Print(adapter)

End Sub

通话:-

 conString1 = String.Format("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = '{0}'; Extended Properties = Excel 8.0", 'F:\MicroTest\data\log.xlsx)')

LoadData(conString1)

我是学生,正在学习,所以请帮助,我没有找到这个解决方案,主要是我找到了在datagrid中查看excel数据的解决方案

2 个答案:

答案 0 :(得分:0)

我的测试数据在B2:B8中。

您将需要添加参考:Microsoft Excel 14.0对象库

    Dim oExcel As New Microsoft.Office.Interop.Excel.Application
    oExcel.Workbooks.Open("C:\TEMP\test_data.xlsx")

    Dim oSheet As Microsoft.Office.Interop.Excel.Worksheet = oExcel.Sheets(1)

    ' I would use list instead of an array.
    Dim oTest As New List(Of String)
    For Each oValue As String In oSheet.Range("B2:B8").Value2
        oTest.Add(oValue)
    Next

    ' Using an array
    Dim oData(200) As Integer
    Dim iCounter As Integer = 0

    For Each oValue As String In oSheet.Range("B2:B8").Value2
        oData(iCounter) = CType(oValue, Integer)
        iCounter += 1
    Next

    oExcel.Quit()

答案 1 :(得分:0)

我认为您的方法很好,请使用OleDB访问文件,而不打开Excel实例。 我使用了DataReader和DataTable来收集并保存内存中的数据。

“使用...结束使用”块可确保具有Dispose方法的对象即使出现错误也可以关闭并正确处理。

 Private Sub LoadData()
            Dim dt As New DataTable()
            Dim conStr As String = "Your connection string"
            Using con As New OleDbConnection(conStr)
                Dim query As String = "SELECT * FROM [Sheet1$]"
                Using cmd As New OleDbCommand(query, con)
                    con.Open()
                    Using dr As OleDbDataReader = cmd.ExecuteReader()
                        dt.Load(dr)
                    End Using
                End Using
            End Using
            'The number of rows in the DataTable less the first 2 rows which are title and blank
            'and subtract 1 because vb.net arrays are defined array(upper bound)
            Dim arraySize As Integer = dt.Rows.Count - 3
            Dim myData(arraySize) As Integer
            Dim arrayIndex As Integer = 0
            'Putting data indide array
            For rowIndex As Integer = 2 To dt.Rows.Count - 1
                myData(arrayIndex) = CInt(dt.Rows(rowIndex)(3)) '3 is the index of the TechID column
                arrayIndex += 1
            Next
            'Checking the array - delete in final version
            'I used i as a variable name because this is a very tiny
            'loop and will be deleted eventually. Otherwise, I would
            'have used a more descriptive name.
            For Each i As Integer In myData
                Debug.Print(i.ToString)
            Next
        End Sub