Приведенное ниже IndexOutOfRangeException не позволяет моему коду работать (он компилируется). Хотя я понимаю такое исключение (индексы массива и т. д.), проблема в том, что я пытаюсь просто обновить подраздел 2 строки значением в ячейке B[excelrow]. По какой-то причине существует исключение индекса за пределами границ, которое для меня не имеет смысла. Ни subsection2, ни excelrow не являются частью массива. Единственный массив, о котором я могу думать, - это массив excel, но excelrow - это целое число со значением 3, оно должно быть обновлено до строки B3 и так далее. (Я даже пытался обновить с помощью B3 напрямую, и я получаю ту же ошибку).
Чтобы помочь вам в дальнейшем с контекстом, этот метод, называемый createsource, принимает в качестве входных данных электронную таблицу Excel и общее количество строк в этом листе. Он выполняет приведенный ниже код для вывода двумерного массива, содержащего в первом измерении индекс Excel для каждого нового заказа (каждого отдельного клиента), а во втором измерении — количество товаров, заказанных одним покупателем.
Метод для кода ниже:
частный интервал [,] 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;
}
xlWorksheet.get_Range("B" + excelrow.ToString()).Text
в новой переменной. Кроме того, закройте свой код в файлеtry/catch
. Вcatch
получите полное описание ошибки: Пример:catch (Exception ex) { string strError = ex.ToString(); }
и отредактируйте свой вопрос с описанием ошибки. - person Mauricio Arias Olave   schedule 03.08.2017