Excelシートのセルを参照するための「最も低い」適用可能なインデックスは[1,1]で、これは列A、セル1に対応します。0,0を参照しようとしているようです。テーブル。
C#は通常、ゼロベースのテーブルインデックスを使用しますが、ExcelInteropのプログラマーは別の方法に固執しているようです。それとも、Excelテーブルの最初の行が0ではなく1で始まるため、規則を統一したいと考えていました。私はExcelマニアではありませんが、それが私の推測です。
編集:Siddharthの要求に従って、DataGridViewコントロールの内容をExcelシートにコピーする例を次に示します。これは基本的な機能を示しているだけであり、完全な例または必ずしもベストプラクティスではないことに注意してください。
#using Microsoft.Office.Interop;
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(1);
xlWorkSheet = Excel.Worksheet xlWorkBook.ActiveSheet;
// Notice the index starting at [1,1] (row,column)
for (int i=1; i<DataGridView.Columns.Count+1; i++)
xlWorkSheet.Cells[1, i] = DataGridView.Columns[i - 1].HeaderText;
for each(DataGridViewRow row in DataGridView.Rows)
{
for each (DataGridViewColumn column in DataGridView.Columns)
{
xlWorkSheet.Cells[row.Index+2,column.Index+1] = DataGridView.Rows[row.Index].Cells[column.Index].Value;
}
}
インデックス間の不一致に注意してください。この例では、最初にDataGridViewからヘッダーをコピーし、次にExcelシートの位置をオフセットして、残りのデータをコピーします。これは、列ヘッダーがDataGridのインデックス可能なセルとしてカウントされないためです。これはおそらくDataTablesでも機能します。