索引出口到Excel时超出范围错误

我试图从c#导出数据到Excel使用下面的代码:

enter worksheet = workbook.ActiveSheet; worksheet.Name = "ExportedFromDatGrid"; //Loop through each row and read value from each column. for (int i = 0; i < dataGridView1.Rows.Count + 1; i++) { worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText; } for (int i = 0; i < dataGridView1.Columns.Count; i++) { for (int j = 0; j < dataGridView1.Columns.Count - 1; j++) { // Excel index starts from 1,1. As first Row would have the Column headers, // adding a condition check. worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString(); } } 

我得到以下错误:

指数超出范围。必须是非负数,并且小于收集的数量。 参数名称:索引。

更新我通过更改这个语句解决了这个问题:

 for ( int i = -1; i < DataGridView1.Columns.Count; i++) 

我认为问题在于,许多在线指南和教程都指出,当通过列表,行和列来计算列表时,需要添加+1,因为所有这些对象容器的起始索引都是0。

作为一个新手,可能很难弄清楚你必须在哪里放置+1,特别是当你必须放置+1时。 也许你感到困惑,因为你需要总量的行作为我的最大定义。 但是当你用int i = 0开始你的循环(什么是正确的,因为你不想跳过索引为0的行),你也开始在0点而不是1点。所以没有必要增加+1到最大的断点,因为你仍然通过行dataGridView1.Rows.Count次(< – 金额多less次你的循环得到执行)。


这个exceptionIndex was out of range告诉你,你想用一行,这是超出范围。 由于这一行不存在,所以超出范围。 假设你有10行索引为0 – 9,现在你从0开始经历它们。所以在执行了10次之后,你经历了0 – 9行。由于dataGridView1.Rows.Count给你总数在这个例子中是10行。但是你设置了断点dataGridView1.Rows.Count + 1所以循环想要在第十一次用索引为10的行来完成你的任务,但是最后一行的索引是9所以它不能find这一行,那是什么情况,当它给你的Index out of range execption。 现在我希望你明白那里出了什么问题,为什么。