我想将excel数据表复制到我的datagridview
中,但我想从我的表所在的特定行开始(第9行)(之前有标题,注释等...)不属于桌子的一部分。)
我使用以下代码,但它不会删除dataset
中的行。
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
DtSet.Tables(0).Rows(3).Delete()
DtSet.Tables(0).Rows(3).AcceptChanges()
dataGridArray(selectedTab).DataSource = DtSet.Tables(0)
'MsgBox("number of Row(s) - " & DtSet.Tables(0).Rows.Count)
MyConnection.Close()
在delete()
和acceptChanges
之后,我仍然可以看到标题。
有谁能看到我错在哪里? 谢谢。
答案 0 :(得分:4)
您不希望delete行(在Excel中),但您希望从表中remove。
所以而不是:
DtSet.Tables(0).Rows(3).Delete()
使用:
DtSet.Tables(0).Rows.RemoveAt(3)
但是,由于您不希望删除代码建议的单行,但要删除第9行之前的所有行,请使用:
For i As Int32 = 1 To 8
DtSet.Tables(0).Rows.RemoveAt(0)
Next
答案 1 :(得分:1)
我用以下代码解决了这个问题我不知道如果它是最优雅的解决方案,但它确实有效:
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=""Excel 12.0;IMEX=1""")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
' MyCommand.TableMappings.Add("Table", "Net-informations.com")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)
'find row with the second "item", there are 2. Its where my table starts
For r = 0 To DtSet.Tables(0).Rows.Count - 1
If DtSet.Tables(0).Rows(r).Item(0).ToString = "Item" Then
headerRowSearched = r
End If
Next
'correct name header with the right one.
For c As Integer = 0 To DtSet.Tables(0).Columns.Count - 1
DtSet.Tables(0).Columns(c).ColumnName = DtSet.Tables(0).Rows(headerRowSearched)(c)
Next
'remove all the junk rows up to my header
For i As Int32 = 0 To headerRowSearched
DtSet.Tables(0).Rows.RemoveAt(0)
Next
dataGridArray(selectedTab).DataSource = DtSet.Tables(0)
MyConnection.Close()
答案 2 :(得分:0)
我要做的只是删除列标题并将其替换为第9行中的数据。