将具有多个工作表的单个excel文件导入vb.net中的多个datagridviews

时间:2019-03-05 12:15:27

标签: excel vb.net datagridview

我正在使用以下代码将Excel工作表导入VB.net中的DataGridView。在下面的代码中,将具有工作表名称“ PA”的excel文件导入名为dgvPA的相关datagridview。但是在同一个Excel中,我还有另外两个名为HP和MP的选项卡,我想使用pa在同一实例中导入它们,但我不知道如何实现。

Public Shared Sub ImportAll(ByVal dgvPA As DataGridView, ByVal dgvHP As DataGridView, ByVal dgvMP As DataGridView)
    Dim filepath As String
    Dim ofd As OpenFileDialog = New OpenFileDialog With {
        .Filter = "Excel Files | *.xlsx",
        .Title = "Import Model Info Sheet"
    }
    Try
        If ofd.ShowDialog() = DialogResult.OK Then
            filepath = Path.GetFullPath(ofd.FileName)
            Globals.ModelInfoSheet = filepath
        End If
        dgvPA.DataSource = Nothing
        Dim MyConnection As OleDb.OleDbConnection
        Dim MyCommand As OleDb.OleDbDataAdapter
        MyConnection = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & Globals.ModelInfoSheet & "';Extended Properties=Excel 12.0;")
        MyCommand = New OleDb.OleDbDataAdapter("select * from [" & My.Settings.str_infosheet__tabname_pa & "$]", MyConnection)
        Dim DtSet As DataTable
        DtSet = New DataTable
        MyCommand.Fill(DtSet)
        dgvPA.DataSource = DtSet
        MyConnection.Close()
        MessageBox.Show("File successfully imported")
        frmMain.tabBuildLocal.SelectedTab = frmMain.tabBuildImportList

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

对于HP;

    `MyCommand = New OleDb.OleDbDataAdapter("select * from [" & My.Settings.str_infosheet__tabname_hp & "$]", MyConnection)` and i'd like to import it in dgvHP

和MP;         MyCommand = New OleDb.OleDbDataAdapter("select * from [" & My.Settings.str_infosheet__tabname_mp & "$]", MyConnection),我想将其导入dgvMP

如何使用ImportAll的相同实例实现这些其他选项卡。当我调用ImportAll过程时,我想立即填充datagridviews,否则我应该创建新过程并分别导入它们。

1 个答案:

答案 0 :(得分:1)

您可以使用一个Dictionary,其键为工作表名称,其值为正确的DataGridView,然后对其进行迭代,例如:

Public Shared Sub ImportAll(ByVal dgvPA As DataGridView, ByVal dgvHP As DataGridView, ByVal dgvMP As DataGridView)
    Dim filepath As String
    Dim ofd As OpenFileDialog = New OpenFileDialog With {
        .Filter = "Excel Files | *.xlsx",
        .Title = "Import Model Info Sheet"
    }
    Try
        If ofd.ShowDialog() = DialogResult.OK Then
            filepath = Path.GetFullPath(ofd.FileName)
            Globals.ModelInfoSheet = filepath
        End If
        dgvPA.DataSource = Nothing
        Dim MyConnection As OleDb.OleDbConnection
        MyConnection = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & Globals.ModelInfoSheet & "';Extended Properties=Excel 12.0;")

        Dim tables = New Dictionary(Of String, DataGridView) From {
            {My.Settings.str_infosheet__tabname_pa, dgvPA},
            {My.Settings.str_infosheet__tabname_hp, dgvHP},
            {My.Settings.str_infosheet__tabname_mp, dgvMP}
        }

        For Each item In tables
            Dim MyCommand As OleDb.OleDbDataAdapter
            MyCommand = New OleDb.OleDbDataAdapter("select * from [" & item.Key & "$]", MyConnection)
            Dim DtSet As DataTable
            DtSet = New DataTable
            MyCommand.Fill(DtSet)
            item.Value.DataSource = DtSet
        Next


        MyConnection.Close()
        MessageBox.Show("File successfully imported")
        frmMain.tabBuildLocal.SelectedTab = frmMain.tabBuildImportList

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub