以下IndexOutOfRangeException不允许我的代码运行(它编译)。虽然我理解这种异常(数组索引等)的问题是,我想要做的只是用单元格B [excelrow]中的值更新String subsection2。出于某种原因,有一个索引超出范围的例外对我来说没有意义。 subsection2或excelrow都不是数组的一部分。我能想到的唯一数组是excel数组,但是excelrow是一个值为3的整数,它应该更新为B3行,依此类推。 (我甚至尝试直接使用B3进行更新,并得到同样的错误。)
为了帮助您进一步了解上下文,这个名为createsource的方法将excel电子表格和该表单中的总行作为输入。它执行以下代码以输出在第一维中包含每个新订单(每个不同客户)的Excel索引的2D数组,第二维是每个客户订购的项目数。
代码的方法如下:
private int [,] createsource(Microsoft.Office.Interop.Excel.Worksheet xlWorksheet,int totalRows) {
String subsection = "";
object subsection2 = "";
int orders = 0;
//figures out how many different pages there are going to be
for (int n = 3; n < totalRows + 1; n++)
{
if (!(xlWorksheet.get_Range("B" + n.ToString()).Text == subsection))
{
subsection = xlWorksheet.get_Range("B" + n.ToString()).Text;
orders++;
}
}
MessageBox.Show(orders.ToString());
int[,] source = new int[orders, 2];
int excelrow = 3;
subsection2 = xlWorksheet.get_Range("B" + excelrow.ToString()).Text;
int i;
for (i = 0; i < orders + 1; i++)
{
int j = 1;
if (excelrow == totalRows + 1)
{
break;
}
//Out of bounds exception is found in the below if statement updating subsection2:
if (!(xlWorksheet.get_Range("B" + excelrow.ToString()).Text == subsection2))
{
source[i, 0] = excelrow;
//MessageBox.Show(xlWorksheet.get_Range("B" + excelrow.ToString()).Text.ToString());
subsection2 = xlWorksheet.get_Range("B" + excelrow.ToString()).Text;
excelrow++;
}
for (int iter = 0; iter < 1;)
{
if (excelrow == totalRows + 1)
{
break;
}
if (xlWorksheet.get_Range("B" + excelrow.ToString()).Text == subsection2)
{
excelrow++;
j++;
}
if (!(xlWorksheet.get_Range("C" + excelrow.ToString()).Text == subsection2))
{
subsection2 = xlWorksheet.get_Range("C" + excelrow.ToString()).Text;
iter = 1;
}
}
source[i, 1] = j;
}
MessageBox.Show(source[2, 0].ToString());
return source;
}
答案 0 :(得分:2)
我看到了问题。您将来源声明为:
int[,] source = new int[orders, 2];
......好吧,但看看你的循环:
for (i = 0; i < orders + 1; i++)
......后来提供了:
source[i, 0] = excelrow;
好的,所以如果订单= 100,你已经宣布了一个100长的数组,从0-99开始。然后你的循环,你从0到“小于100 + 1”,又名0-100。当你到达最后一个循环时,你使用的值是i = 100,并试图将它放入不存在的数组点。
您需要将循环减少一个,或者将数组大小增加1.