Поиск по таблице

  • Автор темы Автор темы littleKongo
  • Дата начала Дата начала

littleKongo

Client
Регистрация
17.01.2015
Сообщения
244
Реакции
24
Баллы
18
Есть название конкретного аккаунта. В отдельной таблице есть массив аккаунтов с доп инфой. Необходимо найти строку, в которой это название написано. Столбец для поиска всегда А. Как такое сделать? Стандартными средствами никак не получается. Подскажите , пожалуйста
 
Ну это будет в разы дольше
 
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["tableSearchTextContains"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["SourceTable"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем первую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
        if (parserRegex.IsMatch(cells[1]))
            destTable.AddRow(cells.Union(additionalTable.GetRow(0)));
    }
}

Нашел похожий вариант. Только мне нужно, чтобы возвращало в переменную номер строки, в которой найдено, а если не найдено, то "no"
 
destTable.AddRow(cells.Union(additionalTable.GetRow(0))); замени на return i;
в самом конце пропиши return "no";
Спасибо, получилось. А как сделать, чтобы весь второй стобец, там больше 100 значений в список записался?
 
Рабочий код если нужно вернуть номер строки.

// берем из переменной текст, который надо искать
var textContains = project.Variables["Category_ID"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["IDTable"];
// ищем в каждой строчке в таблице
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 i;
}
}
}
// если ничего не нашли возвращаем "no"
return "no";
 
  • Спасибо
Реакции: ukrainec2014
// берем из переменной текст, который надо искать
var textContains = project.Variables["Category_ID"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["IDTable"];
// ищем в каждой строчке в таблице
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 i;
}
}
}
// если ничего не нашли возвращаем "no"
return "no";

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

Выполнение действия CSharp OwnCode. Sequence contains no matching element

как можно поправить?
 
  • Спасибо
Реакции: Rimen
Может подскажете еще по гугл табличкам? очень надо.. буду признателен...
Не нашел решение, сделал костыль: столбец таблицы загоняю в список и ищу по списку номер в каждом цикле. Жесть как неуниверсально, но функционал нужный выполняет
 
  • Спасибо
Реакции: ukrainec2014
Не нашел решение, сделал костыль: столбец таблицы загоняю в список и ищу по списку номер в каждом цикле. Жесть как неуниверсально, но функционал нужный выполняет

Если что, вот тоже решение, но с поиском по списку через c#
 
с гугл таблицами получается такой ответ



как можно поправить?
Оказывается всё до безобразия просто
Вместо
C#:
Развернуть Свернуть Копировать
var sourceTable = project.Tables["IDTable"];
Нужно
C#:
Развернуть Свернуть Копировать
var sourceTable = project.GoogleSpreadsheets["IDTable"];


C#:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["Category_ID"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.GoogleSpreadsheets["IDTable"];
// ищем в каждой строчке в таблице
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 i;
}
}
}
// если ничего не нашли возвращаем "no"
return "no";
 
Оказывается всё до безобразия просто
Вместо
C#:
Развернуть Свернуть Копировать
var sourceTable = project.Tables["IDTable"];
Нужно
C#:
Развернуть Свернуть Копировать
var sourceTable = project.GoogleSpreadsheets["IDTable"];


C#:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["Category_ID"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.GoogleSpreadsheets["IDTable"];
// ищем в каждой строчке в таблице
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 i;
}
}
}
// если ничего не нашли возвращаем "no"
return "no";

Благодарствую
 
Периодически начинает выдавать ошибку с Google Sheets:
Ссылка на объект не указывает на экземпляр объекта.

Кто-нибудь знает как решить?

(Таблица в настройках подключена, строка для поиска не пустая)

P.S. при том он может начать выдавать и перестать выдавать эту ошибку абсолютно сам без каких-то действий с моей стороны.
 
Последнее редактирование:

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