ここにDataTable dtがあり、これには多くのデータがあります。
DataTableから特定のCell Value、たとえばCell [i、j]を取得します。ここで、i->行およびj->列。 i、jの値を2つのforloops
で繰り返します。
しかし、インデックスによってセルを呼び出す方法がわかりません。
コードは次のとおりです。
for (i = 0; i <= dt.Rows.Count - 1; i++)
{
for (j = 0; j <= dt.Columns.Count - 1; j++)
{
var cell = dt.Rows[i][j];
xlWorkSheet.Cells[i + 1, j + 1] = cell;
}
}
DataRow
には indexer もあります:
Object cellValue = dt.Rows[i][j];
しかし、私は強く型付けされた Field
をサポートする拡張メソッドを好みます nullable types :
int number = dt.Rows[i].Field<int>(j);
または、さらに読みやすく、列名を使用するとエラーが発生しにくくなります。
double otherNumber = dt.Rows[i].Field<double>("DoubleColumn");
おそらくセルとしてではなく、Rows
から参照する必要があります。
var cellValue = dt.Rows[i][j];
次のようにDataTable
を繰り返すことができます:
private void button1_Click(object sender, EventArgs e)
{
for(int i = 0; i< dt.Rows.Count;i++)
for (int j = 0; j <dt.Columns.Count ; j++)
{
object o = dt.Rows[i].ItemArray[j];
//if you want to get the string
//string s = o = dt.Rows[i].ItemArray[j].ToString();
}
}
DataTable
セルのデータのタイプに応じて、オブジェクトを好きなようにキャストできます。
セル列名とセル値を取得するには:
List<JObject> dataList = new List<JObject>();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
JObject eachRowObj = new JObject();
for (int j = 0; j < dataTable.Columns.Count; j++)
{
string key = Convert.ToString(dataTable.Columns[j]);
string value = Convert.ToString(dataTable.Rows[i].ItemArray[j]);
eachRowObj.Add(key, value);
}
dataList.Add(dataList);
}
データテーブル変数でインデクサーを直接呼び出すこともできます。
var cellValue = dt[i].ColumnName