L'index était une erreur hors limites lors de l'export vers Excel

J'essaie d'exporter des données de c # pour excel en utilisant le code suivant:

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.ToSsortingng(); } } 

Je reçois l'erreur suivante:

L'index était hors gamme. Ne devrait pas être négatif et inférieur à la taille de la collection. Nom du paramètre: index.

MISE À JOUR J'ai résolu le problème en modifiant ceci pour une déclaration :

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

Je pense que le problème est que de nombreux guides et tutoriels en ligne indiquent que lorsque vous countz à travers des lists, des arrys et des lignes / colonnes d'une table, vous devez append +1 parce que tous ces conteneurs d'objects ont un indice de début de 0.

Et en tant que nouveau venu, il serait difficile de comprendre au début où vous devez placer +1 et quand vous devez le faire. Peut-être que vous étiez confus parce que vous vouliez la quantité totale de lignes comme votre définition maximale de i. Mais comme vous démarrez votre boucle avec int i = 0 (ce qui est correct, parce que vous ne voulez pas sauter la ligne avec l'index 0), vous démarrez aussi au point 0 et pas 1. Donc, il n'est pas nécessaire d'append +1 au point d'arrêt maximal, car vous continuez à dataGridView1.Rows.Count (<- indiquez combien de time votre boucle est exécutée) à travers les lignes.


Cette exception «L'index était hors de scope» vous indique que vous vouliez faire quelque chose avec une ligne qui était hors de scope. C'était hors de scope car cette ligne n'existait pas. Disons que vous avez 10 lignes avec l'index 0 – 9. Maintenant, vous commencez à les traverser à partir de 0. Donc, après 10 fois l'exécution, vous avez parcouru les lignes 0 à 9. Comme dataGridView1.Rows.Count vous donne le montant total de lignes, dans cet exemple = 10, et vous définissez comme sharepoint rupture dataGridView1.Rows.Count + 1 la boucle veut faire votre tâche la 11ème fois avec la ligne qui a l'index 10, mais l'index de votre dernière ligne est 9. Donc, il ne trouve pas cette ligne et c'est la situation quand elle vous donne l'exécution de l'exception "Index hors gamme". Maintenant, j'espère que vous comprenez ce qui s'est mal passé et pourquoi.