将数据从excel 2003导入dataTable

时间:2018-01-04 19:58:07

标签: excel vb.net datagridview datatable import-from-excel

我使用以下代码将excel工作表导入数据网格视图:

Private Sub Browsimportbtn_Click(sender As Object, e As EventArgs) Handles Browsimportbtn.Click
    Dim textpath As String
    Dim textpath1 As String

    Dim opf As New OpenFileDialog
    If opf.ShowDialog = 1 Then
        textpath = opf.FileName
        textpath1 = opf.SafeFileName
        textpath1 = textpath1.Remove(textpath1.Length -4,4)

        Dim cnexcell As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & textpath & "; Extended Properties = ""Excel 12.0 Xml;HDR=YES"";")
        Dim cmdE As New OleDbCommand("SELECT * FROM Feuil1", cnexcell)

        Try

            Dim daoledb As New OleDbDataAdapter
            Dim dset As New DataSet


            daoledb.SelectCommand = cmdE
            daoledb.Fill(dset, "Feuil1")
            DGVmodele.DataSource = dset.Tables("Feuil1")

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

    End If

End Sub

上面的代码适用于.XLSX个文件(Office 2007,2010 ...),但不适用于.XLS,我也不知道问题出在哪里。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

问题出在连接字符串中。

您将Excel 12指定为与2007或更高版本相关的连接字符串中的版本。尝试使用此函数来构建connectionstring

Public Function BuildConnectionString(Byval m_strExcelPath as String) As String
    If m_strExcelPath.Substring(m_strExcelPath.LastIndexOf(".")).ToLower = ".xlsx" Then
        Return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & m_strExcelPath & ";Excel 12.0;HDR=YES;IMEX=1"
    Else
        Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_strExcelPath & ";Excel 8.0;HDR=YES;IMEX=1"
    End If
End Function

答案 1 :(得分:0)

请尝试使用此功能。

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & m_strExcelPath &  ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"

使用JET OLEDB是不可取的,因为它已经过时了。如果您确实想要使用它,则可能需要重新安装Access Database Engine 2003。

另外,我听说还有关于this的错误。