使用OLEDB从Excel数据表获取数据

时间:2015-04-01 21:08:37

标签: vb.net excel datatable oledb

我有一个excel 2007 xlsm文件,其中一个选项卡上有几个数据表。使用VB.NET,我试图一次读取一个表作为命名范围,如下所示:

Public Function OpeDataFromRange(ByVal Filename as string, ByVal RangeName As String, ByVal bColumnNames As Boolean) as DataTable
    ' Returns a DataSet containing information from a named range
    ' in the passed Excel worksheet
    Dim sHDR As String
    Dim strConn As String
    If bColumnNames Then
        sHDR = "Yes"
    Else
        sHDR = "No"
    End If


    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & Filename & ";Extended Properties=""Excel 12.0 Macro;HDR=" & sHDR & """;"



    Dim objConn _
        As New System.Data.OleDb.OleDbConnection(strConn)
    objConn.Open()
    ' Create objects ready to grab data
    Dim objCmd As New System.Data.OleDb.OleDbCommand( _
        "SELECT * FROM [" & RangeName & "]", objConn)
    Dim objDA As New System.Data.OleDb.OleDbDataAdapter()
    objDA.SelectCommand = objCmd
    ' Fill DataSet
    Dim objDS As New System.Data.DataSet()
    objDA.Fill(objDS)
    ' Clean up and return DataSet
    objConn.Close()

    return objDS


End Function

但我在Fill命令中收到错误:

Microsoft Office Access数据库引擎找不到对象' MyNamedTable1'。确保对象存在,并且您正确拼写其名称和路径名称。

我尝试在SELECT中读取整个工作表,然后通过objDS.Tables删除我的表,但是只有一个表加载了包含所有内容的表。

任何建议?

1 个答案:

答案 0 :(得分:0)

您不能将Microsoft.Jet.OLEDB.4.0与Excel 12.0一起使用,而应使用Microsoft.ACE.OLEDB.12.0。

顺便提一下,您正在填充DataSet但返回DataTable需要更改其中一个。

我个人更喜欢使用DataTable,但您可能更喜欢DataSet。如果你想使用DataTable,你可以......

Dim objDT As New DataTable
objDT.Load(objCmd.ExecuteReader)