2016-05-09 6 views
0

Ich habe eine Konsolenanwendung, die Daten von einem Webdienst abruft. Es wird die Antwort auf eine Excel-Datei schreiben. Meine Logik ist in Ordnung mit einer Datenzeile, aber wenn es mehr als eine ist, muss die Excel-Datei richtig geschrieben werden.Schleife in der Liste der Datenzeile für Excel

int i = 0; 
int j = 0; 
int k = 0; 

foreach (var response in responseList) 
{ 
dt = response; 
    for (i = 0; i <= dt.Rows.Count - 1; i++) 
    { 
     for (j = 0; j <= dt.Columns.Count - 1; j++) 
     { 
      xlWorkSheet.Cells[i + 1, j + 1] = dt.Rows[i].ItemArray[j].ToString(); 
     } 
    } 
} 

Mein Problem mit diesem Code ist, dass die Excel-Zeilen, die immer gleich sind geschrieben werden.

Beispiel: Erste Antwort hat 20 Zeilen, zweite Antwort hat 10 Zeilen. Aber nach der Schleife erzeugte mein Excel nur 20 Reihen. Es scheint, als ob nicht alle Daten geschrieben werden. Irgendwelche Ideen warum?

EDIT

habe ich versucht, den Code unten, aber immer noch kein Glück.

int jOffset = 0; 
int iOffset = 0; 

foreach (var response in responseList) 
{ 
    dt = response; 
    for (i = 0; i <= dt.Rows.Count - 1; i++) 
    { 
     for (j = 0; j <= dt.Columns.Count - 1; j++) 
     { 
      xlWorkSheet.Cells[i + iOffset + 1, j + jOffset + 1] = dt.Rows[i].ItemArray[j].ToString(); 
     } 
    } 
    jOffset++; 
    iOffset++; 
} 
+0

Weil Sie jedes Mal von '0' beginnen. Sie überschreiben jedes Mal Ihre vorherigen Antworten. Sie müssen 'iOffset' und' jOffset' speichern und dann schreiben: 'xlWorkSheet.Cells [i + iOffset + 1, j + jOffset + 1] = dt.Rows [i] .ItemArray [j] .ToString();' . Dann, natürlich, inkrementieren "iOffset" und "jOffset" wie nötig – Rob

+0

@Rob - siehe bearbeiten, ich bekomme die gleiche Zeilenanzahl. –

+0

wo ist der Schnitt? –

Antwort

0

try this ...

class YourClass 
{ 
    //rowOffset as field 
    int rowOffset = 0; 

    void YourMethod() 
    { 
     //... your other codes here 

     int i = 0; 
     int j = 0; 
     int k = 0; 

     dt = response; 
     for (i = 0; i <= dt.Rows.Count - 1; i++) 
     { 
      for (j = 0; j <= dt.Columns.Count - 1; j++) 
      { 
       xlWorkSheet.Cells[i + iOffset + 1, j + 1] = dt.Rows[i].ItemArray[j].ToString(); 

      } 
     } 
     rowOffset += i; //the last 'i' (row) recorded will now be added to your row offset 

     //... 
    } 
} 

Grundsätzlich müssen Sie nur ein rowOffset und Sie sollten es speichern als field seinen Wert zu behalten. Dann, nachdem Sie eine loop durch die response abgeschlossen haben, fügen Sie die letzte i (Zeile #) zu der rowOffset hinzu, die der Offset für nachfolgende Schleifen sein wird.

BEARBEITEN: Korrektur auf rowOffset + = i

+0

Vielen Dank für diese Lösung. Es hat für mich funktioniert. –

+0

großartig! bitte lesen sie die erklärung unter dem code, seit ich sie editiert habe –

Verwandte Themen