2016-05-09 2 views
0

У меня есть консольное приложение, которое извлекает данные из веб-службы. Он напишет ответ на файл excel. Моя логика в порядке с одной строкой данных, но если ее несколько, нужно писать в файл excel должным образом.Петля в списке строк данных для 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(); 
     } 
    } 
} 

Моя проблема с этим кодом в том, что строки excel, которые записываются, всегда одинаковы.

Пример: первый ответ имеет 20 строк, второй ответ - 10 строк. Но после цикла мой excel генерировал только 20 строк. Похоже, что не все данные не записываются. Любые идеи почему?

EDIT

Я попытался код ниже, но до сих пор не повезло.

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

Потому что вы начинаете с '0' каждый раз. Вы каждый раз переписываете свои предыдущие ответы. Вам нужно сохранить 'iOffset' и' jOffset', а затем написать: 'xlWorkSheet.Cells [i + iOffset + 1, j + jOffset + 1] = dt.Rows [i] .ItemArray [j] .ToString();' , Тогда, конечно, приращение 'iOffset' и' jOffset' по мере необходимости – Rob

+0

@Rob - см. Edit, я получаю тот же подсчет строк. –

+0

где редактирование? –

ответ

0

попробовать это ...

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 

     //... 
    } 
} 

В принципе, вам нужно всего лишь rowOffset, и вы должны сохранить его как field сохранить свое значение. Затем, после того как вы закончите один loop через response, вы добавите последний i (строка #) в rowOffset, который будет смещением для последующих циклов.

EDIT: коррекция на rowOffset + = i

+0

Благодарим вас за это решение. Это сработало для меня. –

+0

отлично! пожалуйста, перечитайте объяснение ниже кода, так как я его удалил –

Смежные вопросы