Импорт одного файла Excel с несколькими листами в несколько таблиц данных в vb.net - PullRequest
0 голосов
/ 05 марта 2019

Я использую приведенный ниже код для импорта листа Excel в DataGridView на VB.net. В приведенном ниже коде файл Excel с именем листа "PA" импортируется в связанный вид данных с именем dgvPA. Но в том же 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

и для МП; MyCommand = New OleDb.OleDbDataAdapter("select * from [" & My.Settings.str_infosheet__tabname_mp & "$]", MyConnection) и я хотел бы импортировать его в dgvMP

Как я могу реализовать эти дополнительные вкладки с тем же экземпляром ImportAll. Когда я вызываю процедуру ImportAll, я хотел бы сразу заполнить представления данных, в противном случае я должен создать новые процедуры и импортировать их отдельно.

1 Ответ

1 голос
/ 05 марта 2019

Вы можете использовать словарь, ключом которого является имя листа, а значение - правильный 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...