使用OleDb从Excel中的非连续列导入到VB.Net DataGridView

时间:2014-04-01 14:44:15

标签: sql vb.net excel datagridview oledb

我正在尝试从一个巨大的Excel文件中导入数据,以便在VB.Net DataGridView中使用。 我的问题是列名称出现在第4行,而列不是顺序的。 遗憾的是,编辑Excel数据库不是一种选择,因为组织中的许多其他工具都以其当前格式使用它。

这是我到目前为止所尝试过的,我真的很感激解决方案。

    Public Sub GetTable()

    Dim cmd As System.Data.OleDb.OleDbDataAdapter
    Dim ds As New DataSet()
    Dim q1, q2, q3, q4, q5, q6 As String
    Dim cn As System.Data.OleDb.OleDbConnection
    cn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;" + "data source=PATH;Extended Properties=Excel 8.0;")
    q1 = "select * from [2013$B4:D128]"
    'q2 = "select * from [2013$E4:I128]"
    'q3 = "select * from [2013$M4:M128]"
    'q4 = "select * from [2013$O4:P128]"
    'q5 = "select * from [2013$S4:S128]"
    'q6 = "select * from [2013$U4:U128]"
    cmd = New System.Data.OleDb.OleDbDataAdapter(q1, cn)
    cn.Open()
    cmd.Fill(ds, "Table1")
    cn.Close()
    Me.DataGridView1.DataSource = ds
    Me.DataGridView1.DataMember = "Table1"

End Sub

我尝试在查询中使用UNION,但刚从Visual Studio 2013收到错误。

1 个答案:

答案 0 :(得分:0)

跟进上面的评论。这是一个使用VBA / ADO的示例,但说明了我建议如何构建SQL的方法:

Sub Tester()

Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim f As ADODB.Field

    oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=" & ActiveWorkbook.FullName & _
               ";Extended Properties='Excel 8.0;HDR=Yes'"

    oRS.Open "select * from [Data test$A4:E8] where false", oConn


    For Each f In oRS.Fields
        Debug.Print f.Name
    Next f

    oRS.Close

End Sub

如果检查VB.NET版本的输出,可以选择要包含在select语句中的字段名称。