2017-07-12 1 views
0

ich Daten versuche von C# zu exportieren den folgenden Code in Excel:Index war Fehler außerhalb des Bereichs, während Export in 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(); 
    } 
} 

ich die folgende Fehlermeldung erhalten:

Index was out of range.Must be non negative and less than the size of the collection. Parameter name: index.

UPDATE Ich löste das Problem, indem ich diese für Aussage änderte:

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

Wie wäre es 'dataGridView1.Rows.Count' stattdessen für' dataGridView1.Rows.Count + 1' –

+1

Nun ja, Ihre Grenzen für 'i' sind sehr zweifelhaft. Es wäre hilfreich, wenn Sie den Code sorgfältiger formatieren würden, zeigen Sie, wo der Fehler liegt, und teilen Sie uns mit, was Sie beim Debuggen beobachtet haben. –

Antwort

1

ich glaube, das Problem ist, dass viele Online-Ratgeber und Anleitungen exlpain, dass, wenn Sie durch Lists<> zählen, Arrays und rows/columns eines Table müssen Sie +1 hinzugefügt werden, da alle diese Objektcontainer einen Startindex von 0.

haben

Als Neuling kann es schwierig sein, am Anfang herauszufinden, wo Sie die +1 platzieren müssen und vor allem wann Sie müssen. Vielleicht waren Sie verwirrt, weil Sie die Gesamtanzahl der Zeilen als Ihre maximale Definition von i haben wollten. Aber wenn Sie Ihre Schleife mit int i = 0 starten (was richtig ist, weil Sie die Zeile mit dem Index 0 nicht überspringen wollen), starten Sie auch am Punkt 0 und nicht 1. Es ist also nicht nötig, +1 zum Maximum hinzuzufügen Haltepunkt, weil du immer noch dataGridView1.Rows.Count mal gehst (< - wieviel wie oft deine Schleife ausgeführt wird) durch die Zeilen.


Diese Ausnahme Index was out of range sagt Ihnen, dass Sie etwas mit einer Reihe tun wollte, die außer Reichweite war. Es war außerhalb des Bereichs, weil das Element dieser Zeile nicht existierte. Nehmen wir an, Sie haben 10 Zeilen mit dem Index 0 - 9. Nun beginnen Sie, sie beginnend mit 0 zu durchlaufen. Nach 10-maliger Ausführung gingen Sie also durch die Zeilen 0 - 9. Als dataGridView1.Rows.Count gibt Ihnen die Gesamtzahl der Zeilen an Dieses Beispiel 10. Aber Sie setzen als den Haltepunkt dataGridView1.Rows.Count + 1, so dass die Schleife Ihre Aufgabe zum elften Mal mit der Zeile, die den Index 10 hat, aber der Index der letzten Zeile ist 9. So kann es diese Zeile nicht finden und das ist die Situation, wenn es Ihnen die Index out of range Ausnahmeregelung gibt. Jetzt hoffe ich, dass Sie verstehen, was schief gelaufen ist und warum.

Verwandte Themen