我有一个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删除我的表,但是只有一个表加载了包含所有内容的表。
任何建议?
答案 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)