2015-11-15 2 views
0

Я создаю динамические текстовые поля в форме с помощью кнопки (Form1, Panel1). Я отправляю текст из этой динамики в Excel (с помощью кнопки из Form2), каждое текстовое поле в новой строке. Если я начну с таблицы по умолчанию с неограниченным количеством строк, она будет отправлять текст просто отлично с помощью цикла «foreach». Если я попытаюсь сделать строку вставки для каждого текстового поля, строки будут вставляться, но только последнее текстовое поле будет отображать данные в ячейке. IE: с 5 текстовыми полями будет показан текст из # 5. Вот код, я использую:Вставка строки Excel с C#

int row = 1; 
foreach (TextBox dynamicTxtBx in sourcePanel.Controls.OfType<TextBox>()) 
{ 
    worksheet.Rows[1].Insert(); 
    worksheet.Cells[row++, "A"].value = dynamicTxtBx.Text; 
    // ... 
} 
+0

Вы добавляете новую строку всегда в pos 1 useheet.rows [row-1] .insert() – lumos0815

ответ

2

Попробуйте это:

int row = 1; 

foreach (TextBox dynamicTxtBx in sourcePanel.Controls.OfType<TextBox>()) 
{ 
    worksheet.Rows[row].Insert(); 
    worksheet.Cells[row++, "A"].value = dynamicTxtBx.Text; 
    // ... 
} 

Когда вы делаете вставку в строке [1], все текущие строки выталкиваются вниз. Например: строка 2 становится строкой 3, строка 3 становится строкой 4 и так далее. Это причина, по которой значения переписываются и остается только последнее введенное вами значение.

Вы можете имитировать это на листе excel, чтобы получить дополнительную ясность в этом вопросе. Откройте верхний лист. Вставить в строку1. Напишите любое значение. Вставьте снова и напишите в следующей строке. Значение, которое вы запустили ранее, сдвигается вниз по строке, и вы в конечном итоге перезаписываете предыдущее значение.

+0

Благодарим вас за все ответы ,, workheet.Rows [row] .Insert(); это сделало трюк! – DSB

+0

@ DSB Когда ответ решает проблему, установите флажок рядом с этим ответом. Это помогает будущим посетителям быстро находить помощь. –

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