2 次元オブジェクト配列を使用するという Jeremy Thompson の回答を心から支持します。パフォーマンスは桁違いに速くなります。私は、あなたが書いたコードが動かない理由 (そして、なぜ動くはずだと思ったのか) を説明するために書いています。
Visual Basic には、"Default" プロパティという概念があります。これを VBA で記述するときは、その概念を使用しています。
xlWorkSheet.Cells(i, 1) = someValue
Cells プロパティは Range オブジェクトを返します。VBA では、Set キーワードを使用していないため、この行はオブジェクトの値を再割り当てしていません (また、Set キーワードを追加した場合、オブジェクトの値を再割り当てできません。これは読み取り専用であるためです)。プロパティ、Ria が指摘するように)。
Set キーワードがないと、 によって返される Range オブジェクトの既定のプロパティに割り当てが行われCells(i, 1)
ます。もちろん、既定のプロパティは Value プロパティです。つまり、上記の VBA サンプルは次と同等です。
Dim r As Range
Set r = xlWorkSheet.Cells(i, 1)
r.Value = someValue
もちろん、r
変数をスキップすることもできます:
xlWorkSheet.Cells(i, 1).Value = someValue
現在、C# には既定のプロパティの概念がありません。したがって、このコードをショートカットの方法で記述することはできません。これにより、Ria の回答で提案されているコードにたどり着きます。
xlWorkSheet.Cells[i, 1].Value = someValue;
または、 の代わりに実際の値を使用someValue
:
xlWorkSheet.Cells[i, 1].Value = table.Rows[i]["Ref"].ToString();
デフォルトのプロパティは、初心者がコードを書きやすく、コードを簡潔にするのに役立ちますが、初級者と上級者の間の人にとっては混乱を招くものでもあります。