私は72の列からなるデータテーブルを持っています。どのように2つのデータテーブルを比較するのですか
VSTOを使用してExcelシートをダウンロードしますが、これは正常に動作します。
これで、ユーザーはこれらの行の1つまたはこれらの行のすべてを変更し、新しい行を挿入します。
最初にダウンロードされたデータシートがdtAであり、Excelシートで修正されたデータテーブルがdtBであると考えます。
私はdtAとdtBを比較したいと思います。
dtAに存在しないdtBのすべての行を調べる必要があります。
私は、各行ごとにforeachループを入れず、非常に控えめなコーディング方法として評価しています。
これを行うにはどうすればよいですか?私はこの方法をやった
、DataTable dtA = new DataTable();
dtA.Columns.Add("ENo");
dtA.Columns.Add("ENo1");
dtA.Columns.Add("ENo2");
dtA.Columns.Add("ENo3");
dtA.Columns.Add("ENo4");
for (int i = 0; i < 5; i++)
{
DataRow dr = dtA.NewRow();
dr[0] = "Part 0 " + i.ToString();
dr[1] = "Part 1 " + i.ToString();
dr[2] = "Part 2 " + i.ToString();
dr[3] = "Part 3 " + i.ToString();
dr[4] = "Part 4 " + i.ToString();
dtA.Rows.Add(dr);
}
DataTable dtB = new DataTable();
dtB.Columns.Add("ENo");
dtB.Columns.Add("ENo1");
dtB.Columns.Add("ENo2");
dtB.Columns.Add("ENo3");
dtB.Columns.Add("ENo4");
for (int i = 5; i < 10; i++)
{
DataRow dr = dtB.NewRow();
dr[0] = "Part 0 " + i.ToString();
dr[1] = "Part 1 " + i.ToString();
dr[2] = "Part 2 " + i.ToString();
dr[3] = "Part 3 " + i.ToString();
dr[4] = "Part 4 " + i.ToString();
dtB.Rows.Add(dr);
}
Response.Write("\n");
Response.Write("dt A");
Response.Write("\n");
for (int i = 0; i < dtA.Rows.Count; i++)
{
Response.Write(dtA.Rows[i][i].ToString());
Response.Write("\n");
}
Response.Write("\n");
Response.Write("dt B");
Response.Write("\n");
for (int i = 0; i < dtB.Rows.Count; i++)
{
Response.Write(dtB.Rows[i][i].ToString());
Response.Write("\n");
}
var VarA = dtA.AsEnumerable();
var varB = dtA.AsEnumerable();
var diff = VarA.Except(varB);
Response.Write("except");
foreach (var n in diff)
{
Response.Write(n.Table.Rows[0].ToString());
}
しかし、私は、私はplsは何を使うべき のforeach varに使用するのか分からないのですか?
ありがとうございます。答えはありますが、これは新しい行のみを取得します。変更するdtAの行はどうですか? – cmrhema
元の質問で変更が見つかりませんでした。 Excelは「ON UPDATE CURRENT TIMESTAMP」列を持つことができないため、スプレッドシートにマクロを作成してWorksheet_Changeイベントにフックしてみてください。 http://www.ozgrid.com/forum/showthread.php?t=63176&page=1 – James