2010-11-13 65 views
0

最初我使用的是Office Interop导入数据,但这对我和我的电脑来说都是头痛的一半。现在我试图用ACE加载它,但我的数据网格没有被填充。一旦启动并运行,我需要知道如何以其他方式使用这些数据,以及如何从该DataSet中获取特定的数据单元。顺便说一下,我使用的是Visual Studio 2008。如何使用ACE OLEDB将Excel数据导入VB?

现在我有...

Public Function funcUpdate(ByVal sFileLoc As String) As Boolean 
    'Determine connection string properties 
    Dim dbProperty As String 
    If updFileExt = ".xlsx" Then 
     dbProperty = "Excel 12.0 Xml;HDR=No" 
    ElseIf updFileExt = ".xls" Then 
     dbProperty = "Excel 12.0;HDR=No" 
    Else 
     MessageBox.Show("FATAL: File type error on updater", "OHGAWDNO", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     updateTerm() 
     Return False 
    End If 
    Dim dbConn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & updFile & ";Extended Properties=" & dbProperty & ";") 
    Dim dbCommand As New OleDb.OleDbDataAdapter("select * from [sheet1$]", dbConn) 
    Dim dtSet As New DataSet 
    Try 
     dbCommand.TableMappings.Add("Table", "ExcelTest") 
     dbCommand.Fill(dtSet) 
     Form1.DataGrid1.DataSource = dtSet.Tables(0) 
    Catch exlErr As Exception 
    Finally 
     dbConn.Close() 
    End Try 

    updateTerm() 
End Function 
+0

数据集是否被正确填充? – YWE 2010-11-13 05:12:30

+0

我真的不知道该怎么说。 – 2010-11-13 15:08:08

+0

我删除了异常捕获,发现我的连接字符串(围绕文件名和属性没有“”)存在问题,但数据网格仍未被填充。 – 2010-11-13 15:10:24

回答

0

尝试这样做。

Dim path As String = "c:\example.xlsx" 
Dim constr As String = [String].Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;" & _ 
              "HDR=YES;IMEX=1;""", path) 
Dim adapter As New OleDbDataAdapter 
Using cn As New System.Data.OleDb.OleDbConnection(constr) 

     Try 
      cmdselcet = New OleDbCommand("SELECT * FROM [Sheet1$]", cn) 
      cn.Open() 

      adapter.SelectCommand = cmdselcet 
      Dim ds As DataSet 
      ds = New DataSet 

      'Display 
      adapter.Fill(ds) 
      DataGridView1.DataSource = ds.Tables(0) 
      MsgBox("Done!") 

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

    End Using