0
Excelシートからデータを読み込んでDatatableの行を追加するVB.NET関数を使用しました。データテーブル内のAddin Datarow
Private Function LoadDataToRows(ByVal TableName As DataTable, ByVal Header As System.Collections.Specialized.StringCollection) As Boolean
Dim HeaderDataExcel As String = String.Empty 'Data Header
For r As Integer = 1 To RangeDataArray.Rows.Count
Dim NewRow As DataRow = TableName.NewRow
For c As Integer = 1 To RangeDataArray.Columns.Count
If Not (IsNothing(DirectCast(ActiveSheetToManipulate.Cells.Item(r + DataStartRow, c), Excel.Range).Value)) Then
Dim ValueToLoad As String = TryCast(ActiveSheetToManipulate.Cells.Item(r + DataStartRow, c), Excel.Range).Value.ToString
HeaderDataExcel = TryCast(ActiveSheetToManipulate.Cells.Item(DataStartRow, c), Excel.Range).Value.ToString
Dim indice As Integer = Header.IndexOf(HeaderDataExcel)
TableName.NewRow(indice) = ValueToLoad
Else
'Todo
End If
Next
TableName.Rows.Add(NewRow)
Next
Return True
End Function
ただし、データはテーブルに追加されませんでした。助言がありますか?
インデックスとsintaxを使用します。VBコードを読み込む場合は、列のインデックスであるindiceという整数を定義します。私はまた、 "ValueToLoad" varが正しいことをデバッグによって見ることができます。しかし、データはデータローに追加されませんでした。空の行しか見ることができません。 – Jotric
名前とインデックスの両方がうまくいきます - 私の主張は、** TableName ** .NewRow(indice)= ValueToLoad'を実行するべきではなく、 'NewRow(indice)= ValueToLoad'に代わるものです。次に、コードをステップ実行すると、行がローカルに追加され、その行が停止しているByVal/ByRefの変更が行われます。 – kaj
オブジェクトの新しいインスタンスを作成しない場合、オブジェクトByRefを渡す必要はありませんオブジェクトとしてのメソッド(例えば、 'TableName = new DataTable')は、ReferenceTypesです。 – Nicholas