2016-03-08 238 views
0

我從excel導入3列到vb .net。然後,我想創建第四行或新的DataGridView,並在每行數據上追加一些列。例如我有excel文件:將數據從excel導入到vb .net

12/26/2016 9A Christmas Day 
3/25/2016 9A Good Friday 
3/28/2016 AS Easter Monday 
12/26/2016 AS St. Stephen's Day 
3/25/2016 AS Easter Monday 
1/1/2016 AS New Year's Day 
12/26/2016 BE Christmas 
1/1/2016 BZ New Year's Day 
2/9/2016 BZ Carnival 
5/26/2016 BZ Corpus Christ 
4/21/2016 BZ Tiradentes Day 
12/27/2016 CA Boxing Day (obs) 
10/10/2016 CA Thanksgiving 

我想要的是,在第二列的內容後添加新列,其中日期相同。例如:

12/26/2016 9A Christmas Day 9A AS BE 
3/25/2016 9A Good Friday 9A 
3/28/2016 AS Easter Monday AS 
12/26/2016 AS St. Stephen's Day 9A AS BE 
3/25/2016 AS Easter Monday AS 
1/1/2016 AS New Year's Day AS BZ 
12/26/2016 BE Christmas 9A AS BE 
1/1/2016 BZ New Year's Day AS BZ 
2/9/2016 BZ Carnival BZ 
5/26/2016 BZ Corpus Christ BZ 
4/21/2016 BZ Tiradentes Day BZ 
12/27/2016 CA Boxing Day (obs) CA 
10/10/2016 CA Thanksgiving CA 

具有相同日期的行在第四列中將具有相同的值。列名是(Date,CDR Code,Holiday)。數據是工作表的名稱。代碼中,我寫道:

Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

     Dim MyConnection As New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='d:\test.xlsx';Extended Properties='Excel 12.0;HDR=YES'") 
     Dim MyCommand As New System.Data.OleDb.OleDbDataAdapter("select * from [Data$]", MyConnection) 
     Dim DtSet As New System.Data.DataSet 
     MyCommand.Fill(DtSet) 
     DataGridView1.DataSource = DtSet.Tables(0) 
     MyConnection.Close() 

    End Sub 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     Dim MyConnection2 As New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='d:\test.xlsx';Extended Properties='Excel 12.0;HDR=YES'") 
     Dim MyCommand2 As New System.Data.OleDb.OleDbDataAdapter("select [CDR Code] from [Data$] WHERE [Date]=[Date] ", MyConnection2) 
     Dim DtSet2 As New System.Data.DataSet 
     MyCommand2.Fill(DtSet2) 
     DataGridView2.DataSource = DtSet2.Tables(0) 
     MyConnection2.Close() 

    End Sub 

End Class 
+0

您需要解決你的問題:「我從Excel導入3列VB.NET中然後我想創建一個第四行或新的DataGridView「 - 這沒有任何意義。您需要清楚 –

+0

我在1個datagridview中插入3列。出於上述原因,我想添加第四行。如果無法在導入3個excel列的datagrid中附加第4行,則創建新的Datagrid,其中將顯示我想要的結果。 – Masyaf

+0

「我插入3列....我想添加第四行」 - 這是令人困惑的。你需要開始思考更多的動態!你可以使用4個屬性('List(Of MyPoco)')的POCO對象列表作爲你的'DataSource',並從DB/Excel加載3個屬性(我希望你使用Microsoft.ACE.OleDB)。一旦你加載你的數據列表,你只需分配'.Datasource ='屬性 - WOW! –

回答

0

解決方案:

Public Class Form1 


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    Dim fd As OpenFileDialog = New OpenFileDialog() 
    Dim strFileName As String 

    fd.Title = "Open File Dialog" 
    fd.InitialDirectory = "C:\" 
    fd.Filter = "Excel Files|*.xlsx" 
    fd.FilterIndex = 2 
    fd.RestoreDirectory = True 

    If fd.ShowDialog() = DialogResult.OK Then 
     strFileName = fd.FileName 
    End If 

    Dim dbconnect As New DBConnection(strFileName) 
    Dim ds As New System.Data.DataSet 
    Dim tempTable As DataTable 
    Dim tempnames As String 
    Dim tempdate As String 
    Dim tempds As New System.Data.DataSet 



    ds = dbconnect.ExecuteSql("select * from [Data$]") 
    tempTable = ds.Tables(0) 

    tempTable.Columns.Add("OtherNames", Type.GetType("System.String")) 

    For Each Row As DataRow In tempTable.Rows 
     tempdate = Row.Item(0) 
     tempds = dbconnect.ExecuteSql("select [CDR Code] from [Data$] where [Date]=#" + tempdate + "#") 
     tempnames = "" 
     For Each Row1 As DataRow In tempds.Tables(0).Rows 
      tempnames += Row1.Item(0) + " " 
     Next 
     Row.Item("OtherNames") = tempnames 
    Next 

    DataGridView1.DataSource = tempTable 

End Sub 


End Class 

而DBConnection的類:

Public Class DBConnection 
Dim con As System.Data.OleDb.OleDbConnection 

Public Sub New(ByVal FilePath As String) 
    con = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + "; Extended Properties='Excel 12.0 Xml;HDR=YES';") 
End Sub 
Protected Overrides Sub Finalize() 
    MsgBox("Connection Closed") 
    con.Close() 
End Sub 

Public Function ExecuteSql(ByVal sql As String) As System.Data.DataSet 
    Dim da As New System.Data.OleDb.OleDbDataAdapter(sql, con) 
    Dim ds As New System.Data.DataSet 
    da.Fill(ds) 
    Return ds 
End Function 

End Class 
0
For intI As Integer = 0 To DataGridView1.Rows.Count - 1 
     For intJ As Integer = intI + 1 To DataGridView1.Rows.Count - 1 
      If DataGridView1.Rows(intI).Cells(0).Value = DataGridView1.Rows(intJ).Cells(0).Value Then 
       DataGridView1.Rows(intI).Cells(3).Value = DataGridView1.Rows(intI).Cells(1).Value + DataGridView1.Rows(intJ).Cells(1).Value 
       Exit Sub 
      End If 
     Next 
    Next 

現在你剛剛有適應的代碼。順便說一下,我在dgv1中添加了第4行。

+0

它的工作原理,但它只添加下一個匹配的記錄。與之匹配的其他人不會追加。 – Masyaf

+0

有什麼消息嗎?你改變了什麼嗎? – noidea

+0

一位朋友幫我解決了這個問題。無論如何感謝 – Masyaf