2017-08-03 1 views
1

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; 

    } 
+0

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. –

+0

Welche ** genaue ** Zeile löst die Ausnahme aus? – mjwills

Antwort

2

ich das Problem sehen . Sie erklärt Quelle als:

int[,] source = new int[orders, 2]; 

... okay, aber in der Schleife aussehen:

for (i = 0; i < orders + 1; i++) 

..., die später Feeds in:

source[i, 0] = excelrow; 

Okay, Wenn Aufträge = 100, haben Sie ein 100 langes Array deklariert, das von 0 bis 99 reicht. Dann geht Ihre Schleife von 0 auf "weniger als 100 + 1", auch bekannt als 0-100. Wenn Sie zur letzten Schleife kommen, verwenden Sie einen Wert von i = 100 und versuchen, ihn in den nicht vorhandenen Array-Punkt einzufügen.

Sie müssen entweder Ihre Schleife um eins verringert, oder erhöhen Sie Ihre Array-Größe von 1.

Verwandte Themen