2015-02-12 36 views
0

我想在下面的代碼中使用這種方法在datagridview中導入Excel。但我在這行「InvalidOperationException異常」的錯誤不能得到的數據顯示在datagrid視圖導入excel vb.net

cnnExcel.Open() 

,這裏是整個代碼

組合框爲cmbExcel 有一些,如果條件支持依賴於Excel中版本(二〇〇三年至2013年)

Imports System.Data.OleDb 
Public Class Form1 
Dim cnnExcel As New OleDbConnection 
Public Function GetExccelSheetNames() As String() 
    Dim ConStr As String = "" 
    Dim dt As DataTable = Nothing 
    Dim opExcel As New OpenFileDialog 
    opExcel.Filter = "(*.xlsx)|*.xlsx|(*.xls)|*.xls" 
    opExcel.ShowDialog() 
    Dim pathExcel As String = opExcel.FileName 
    If pathExcel.Trim = "" Then 
     MessageBox.Show("Please Select Excel File !") 
     Return Nothing 
    Else 
     Dim Ext As String = pathExcel.Substring(pathExcel.LastIndexOf(".") + 1) 
     If Ext.Length = 3 Then 
      ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathExcel + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';" 
     ElseIf Ext.Length = 4 Then 
      ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathExcel + ";Extended Properties='Excel 12.0 xml;HDR=YES';" 
     End If 
     cnnExcel = New OleDbConnection(ConStr) 
     cnnExcel.Open() 
     dt = cnnExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing) 
     If dt Is Nothing Then 
      Return Nothing 
     End If 
     Dim excelSheetNames As [String]() = New [String](dt.Rows.Count - 1) {} 
     Dim i As Integer = 0 
     For Each row As DataRow In dt.Rows 
      excelSheetNames(i) = row("TABLE_NAME").ToString() 
      i += 1 
     Next 
     cnnExcel.Close() 
     Return excelSheetNames 
    End If 
End Function 

增加了一個按鈕,btnBrows到眉毛從本地驅動器的任何位置excel文件

Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click 
    cmbsheet.DataSource = GetExccelSheetNames() 
End Sub 
Dim dt As New DataTable 

然後最後具有按鈕以瀏覽高強的datagridview

Private Sub btnShow_Click(sender As Object, e As EventArgs) Handles btnShow.Click 
    Dim cmd As New OleDbCommand("Select * from [" + cmbsheet.SelectedValue.ToString() + "]", cnnExcel) 
    cnnExcel.Open() 
    dt.Clear() 
    dt.Load(cmd.ExecuteReader()) 
    cnnExcel.Close() 
    DataGridView1.DataSource = dt 

End Sub 

末級

回答

1

使用此作爲參考。這是100%的工作。我在我的一個應用程序中使用它。將此代碼放在導入按鈕上。

Dim result As DialogResult = OpenFileDialog1.ShowDialog() 
    Dim path As String = OpenFileDialog1.FileName 
    Me.TextBox1.Text = path.ToString 

    Try 
     Me.dgvFile.DataSource = Nothing 
     Dim MyConnection As System.Data.OleDb.OleDbConnection 
     Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 
     MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & Me.TextBox1.Text & "';Extended Properties=Excel 8.0;") 
     MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection) 
     MyCommand.TableMappings.Add("Table", "Net-informations.com") 
     DtSet = New System.Data.DataTable 
     MyCommand.Fill(DtSet) 
     Me.dgvFile.DataSource = DtSet 

     MyConnection.Close() 

     MessageBox.Show("File successfully imported") 

    Catch ex As Exception 
     MessageBox.Show("Error") 
    End Try 
+0

謝謝,我已經找到了解決方案。代碼是好的我只需要安裝AccessDatabaseEngine.exe – Adam 2015-02-13 09:04:38

+0

噢好吧。很高興來到這裏。祝你好運 :) – Nek 2015-02-13 09:09:48