我正在使用以下代码将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,否则我应该创建新过程并分别导入它们。
答案 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