Die folgende IndexOutOfRangeException läßt meinen Code nicht laufen (er kompiliert). Während ich diese Art von Ausnahme (Array-Indizes usw.) verstehe, ist das Problem, was ich versuche zu tun, ist einfach aktualisieren Sie die String-Subsection2 mit dem Wert in Zelle B [excelrow]. Aus irgendeinem Grund gibt es eine Index-Out-of-Bounds-Ausnahme, die für mich keinen Sinn ergibt. Weder subsection2 noch excelrow sind Teil eines Arrays. Das einzige Array, das mir einfällt, ist das Excel-Array, aber excelrow ist eine Ganzzahl mit dem Wert 3, es sollte auf die Zeile B3 aktualisiert werden und so weiter. (Ich habe sogar versucht, mit B3 direkt zu aktualisieren, und ich bekomme den gleichen Fehler).Microsoft.Office.Interop IndexOutOfRangeException
Um Sie weiter mit Kontext zu helfen, verwendet diese Methode namens createsource als Eingabe die Excel-Tabelle und die gesamten Zeilen in diesem Blatt. Es führt den folgenden Code aus, um ein 2D-Array auszugeben, das in der ersten Dimension den Excel-Index jeder neuen Bestellung (jeden unterschiedlichen Kunden) enthält, und die zweite Dimension ist die Anzahl der bestellten Artikel pro Kunde.
Das Verfahren für den Code ist unten:
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;
}
Holen Sie sich den Wert von 'xlWorksheet.get_Range ("B" + excelrow.ToString()). Text' in einem neuen Variable. Schließe außerdem deinen Code in einem "try/catch". Im 'catch' erhalten Sie die vollständige Beschreibung des Fehlers: Beispiel:' catch (Exception ex) {string strError = ex.ToString(); } 'und [bearbeiten] Sie Ihre Frage mit der Beschreibung des Fehlers. –
Welche ** genaue ** Zeile löst die Ausnahme aus? – mjwills