Поиск по ячейкам в таблице.

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
С самого утра бьюсь и никак. Может кто подскажет решение. Есть две таблицы, исходная (source) и целевая (destionation). Надо взять из исходной ID (колонка А) найти его в целевом (колонка А) и в целевой таблице, в колонку B вставить соответствующее значение из колонки B исходной таблицы. Для поиска использую данный сниппет, но не получается привязаться к строке таблицы в которой находится нужный ID что бы записать нужное значение в нужную строку. Пример таблиц прилагаю в архиве. Форум не разрешает XLS добавлять.

Код:
// берем из переменной текст, который надо искать
var textContains = project.Variables["USER_ID"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["source"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // пройдем в цикле по всем ячейкам
        for (int j=0; j < cells.Length; j++)
        {
            // проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
            if (cells[j].Contains(textContains))
                return String.Join(":", sourceTable.GetRow(i));
        }
    }
}
// если ничего не нашли возвращаем "no"
return "no";
 

Вложения

  • 11,3 КБ Просмотры: 6

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Незачем брать целую строку и работать с ней. Бери только одну ячейку. GetCell
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Да, но это по моему не решит задачу. Как получить номер строки в которой найден совпадение.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
циклом. номер итерации (i) и есть номер совпадения
 
  • Спасибо
Реакции: one

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
C#:
IZennoTable sourceTable = project.Tables["Source"];
IZennoTable destTable = project.Tables["Destionation"];
lock (SyncObjects.TableSyncer) {
    for (int i = 0; i < sourceTable.RowCount; i++) {
        for (int j = 0; j < destTable.RowCount; j++) {
            if (sourceTable.GetCell(0, i) == destTable.GetCell(0, j))
                destTable.SetCell(1, j, sourceTable.GetCell(1, i));
        }
    }
}
 
  • Спасибо
Реакции: one и doc

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Любишь ты Док загадками говорить. :D Dimionix, спасибо!
я люблю задавать направление. Кто его реализует - черпает для себя больше, чем если бы просто получил решение. Весом, к тому же, тот факт, что мне лень писать готовые решения)
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
я люблю задавать направление. Кто его реализует - черпает для себя больше, чем если бы просто получил решение. Весом, к тому же, тот факт, что мне лень писать готовые решения)
Я шучу... Я знаю что ты наводку даешь. :-)
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 089
Благодарностей
126
Баллы
63
C#:
IZennoTable sourceTable = project.Tables["Source"];
IZennoTable destTable = project.Tables["Destionation"];
lock (SyncObjects.TableSyncer) {
    for (int i = 0; i < sourceTable.RowCount; i++) {
        for (int j = 0; j < destTable.RowCount; j++) {
            if (sourceTable.GetCell(0, i) == destTable.GetCell(0, j))
                destTable.SetCell(1, j, sourceTable.GetCell(1, i));
        }
    }
}
Почему код работает если таблицы привязаны с изменениями к файлам. Если отвязать от файлов - то не работает.
 

Profits

Client
Регистрация
20.07.2016
Сообщения
37
Благодарностей
13
Баллы
8
Почему код работает если таблицы привязаны с изменениями к файлам. Если отвязать от файлов - то не работает.
Если отвязаны - то просто не сохраняет автоматически.
А в самих таблицах (если открыть в PM) изменения будут.
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 089
Благодарностей
126
Баллы
63
А в самих таблицах (если открыть в PM) изменения будут.
В том то и дело, что смотрю в PM и код не работает в таблицах сформированных, но не привязанных к файлам.
Делаю тестовые таблицы с привязками и изменениями к файлам, код отрабатывает свой функционал.
 

shell

Client
Регистрация
16.05.2016
Сообщения
114
Благодарностей
4
Баллы
18
Ребята, помогите разобраться в коде. Можно пошагово объяснить что делать?
С С# только начинаю разбираться, сложновато мне.
У меня стоит подобная задача как у автора.

Есть сайт, с которого еженедельно достаётся информация в таблицу, это ТАБЛИЦА ОБЩАЯ.
Работа происходит в 2 этапа, сначала достаём все ссылки, затем по каждой ссылке заходим и забираем информацию

ТАБЛИЦА ОБЩАЯ вида:
url/price1/price2/price3/price4

Раз в неделю нужно сравнивать новые добавленные на сайте значения с этой таблицей. всё происходит по кругу и значения просто дописываются в эту таблицу. Но собираем значения в таблицу 2 (затем просто руками добавляем нужное в ТАБЛИЦУ ОБЩУЮ)

Задача: когда на втором шаге я достаю инфу в таблицу 2, нужно каждый раз сравнивать по url с ТАБЛИЦЕЙ ОБЩЕЙ и если совпадение найдено, добавлять всю строку в таблицу 2 c добавлением комментария в следующую ячейку (просто пометка что-то типа "Внимание изменилась цена"):

url/price1/price2/price3/price4/comments

А если одинаковые значения не найдены, то просто записываем в таблицу 2 как есть:
url/price1/price2/price3/price4
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)