Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用OLEDB从Excel数据表获取数据_Vb.net_Excel_Datatable_Oledb - Fatal编程技术网

Vb.net 使用OLEDB从Excel数据表获取数据

Vb.net 使用OLEDB从Excel数据表获取数据,vb.net,excel,datatable,oledb,Vb.net,Excel,Datatable,Oledb,我有一个Excel2007XLSM文件,其中一个选项卡上有几个数据表。使用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

我有一个Excel2007XLSM文件,其中一个选项卡上有几个数据表。使用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搜索出我的表,但是表中只加载了一个包含所有内容的表


有什么建议吗?

您不能在Excel 12.0中使用Microsoft.Jet.OLEDB.4.0,您应该使用Microsoft.ACE.OLEDB.12.0

顺便说一句,您正在填充数据集,但返回的数据表需要更改其中一个数据集

就个人而言,我更喜欢使用DataTable,但您可能更喜欢数据集。如果要使用数据表,可以

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

首先打开选项Strict。您的函数定义为返回DataTable,但实际上返回的是一个数据集;在其中一个选项卡上,我有几个数据表,这太奇怪了。数据表是数据对象,没有UI显示,所以不清楚您有什么。它可能被称为MyNamedTable1$。使用objConn.GetSchemaTables获取文件中的表列表,并遍历它们以查看命名范围的名称。Ptutonix,是,函数应返回DataSet。我把它从这个帖子的一个Sub转换过来,我错过了。对于数据表,我指的是excel tables.Ciaran,我尝试从MyNamedTable1$中选择*,但在FROM子句中出现语法错误。我还尝试了从[MyNamedTable1$]中选择*,发现“MyNamedTable1$”不是有效名称。请确保它不包含无效字符或标点,并且不太长。Ciaran,我运行objConn.GetSchemaTables,列出的表主要对应于单个工作表的名称。还有一些其他名称,但这些名称不是我工作表中定义的表的名称,即不是公式->名称管理器中的名称。Aran,我确实尝试使用ACE.OLEDB。12.0,但我发现您找不到可安装的ISAM错误。我遵照本文的建议,切换到OLEDB 4.0,您是否真的安装了它?这几天很标准,但我想你可能没有。使用Regedit并查看是否有密钥。i、 e.HKEY\U CLASSES\U ROOT\Microsoft.ACE.OLEDB.12.0是的,已安装。我使用了另一种连接方式,使用OleDbConnectionStringBuilder,现在我可以使用ACE.OLEDB进行连接。12.0,但我在尝试查询我的表时遇到了相同的错误:Microsoft Office Access数据库引擎找不到对象“MyNamedTable1”。确保对象存在,并且正确拼写其名称和路径名。架构表中似乎没有列出表名。请参阅我关于使用GetSchema的评论。是否确实传递了正确的文件名,文件是否存在,以及您是否有权访问该文件?除此之外,我不知所措。你的代码对我来说很好用。