Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка строк в Excel, Хитроумное дублирование строк 
V
    Опции темы
WOoHOo
Дата 23.10.2013, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.11.2010

Репутация: нет
Всего: нет



Пример, есть таблица:

A        B         C             D
12      rr         ght         124, 5, 89
2        grr       ght         3, 5
111    ad       ght         6
55      bt5      ght         124, 5, 89, 666

Ее нужно привести к виду:

A        B         C             D
12      rr         ght         124, 5, 89
12      rr         ght         124, 5, 89
12      rr         ght         124, 5, 89
2        grr       ght         3, 5
2        grr       ght         3, 5
111    ad       ght         6
55      bt5      ght         124, 5, 89, 666
55      bt5      ght         124, 5, 89, 666
55      bt5      ght         124, 5, 89, 666
55      bt5      ght         124, 5, 89, 666

Т.е. строка должна повторяться столько раз, сколько цифр в столбце D.

Проблема в неправильном количестве вставок, т.е. вставляется строк больше чем нужно; неправильная позиция копирования строки для вставки, т.е. перескакивает цикл через строки и копирование происходит через строку.

Код


for(int i=1; i<=work_sheet.UsedRange.Rows.Count; i++)
{
// Получаем числа из ячейки столбца D
Regex rgx = new Regex(@\d+);
MathCollection mcol = rgx.Matches(work_sheet.Cells[i, "D"], Value);
// Копируем строку
work_sheet.Rows[i].Copy();
if (mcol.Count > 0) // Ячейка не пустая, есть цифры
{
// Для каждой цифры делаем вставку
for(int j=0; j<mcol.Count; j++)
{
// Всегда вставляем на 1 строку ниже чем копируемая строка 
work_sheet.Rows[i+1].Insert(Excel.XlInsertShiftDirection.XlShiftDown);
}
// Cмещаемся на вставленные строки ниже
i = i + mcol.Count - 1;
}
}

Прошу помощи. Мозг кипит, кучу вариантов перепробовал, в т.ч. и со switch.. И не получается. Нужен свежий взгляд со стороны ;)
PM MAIL   Вверх
WOoHOo
Дата 25.10.2013, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.11.2010

Репутация: нет
Всего: нет



[РЕШЕНО]
Так, алгоритм практически правильный.
Ошибка была в другом месте. Брал данные из старого листа и выполнял операции с ними, хотя данные надо было брать с нового листа (они почти идентичны). Вот и получилась путаница из-за копипасты и невнимательности (не посмотрел с каким листом работаю): work_sheet или new_work_sheet
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0367 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.