Проблема с C# и Excel

Dark_Keel

Client
Регистрация
17.05.2016
Сообщения
3
Благодарностей
0
Баллы
1
Здравствуйте. Столкнулся с такой проблемой и пока не смог ее решить, по поиску тоже ничего не нашел нужного (если кто-то наткнется на похожую тему, буду благодарен ссылке).
Собственно в чем дело:
Есть excel таблица, и есть C# код для поиска по этой таблице нужной строки.
Вот сам код:
Код:
var textContains = project.Variables["aaa"].Value;
var sourceTable = project.Tables["bbb"];
lock(SyncObjects.TableSyncer)
{
for(int i=0; i < sourceTable.RowCount; i++)
{
var cells = sourceTable.GetRow(i).ToArray();
if (cells[19].Contains(textContains))
{ return i;
}
}
}

return "No info!";
По нему должен проходить поиск в таблице "bbb" по значению из переменной "aaa".
Столбец из таблицы берется под буквой T (20й по счету).
Когда выполняется проект, на данном коде выдается ошибка:
"Выполнение действия CSharp Owncode индекс находился вне границ массива".
Однако, если через ПМ открыть таблицу, нажать "просмотр содержимого", а потом закрыть и запустить еще раз код, то все идет как надо, и находит ту строку, которую надо.

Может я что-то не так делаю, но данный код хорошо зарекомендовал себя, когда поиск проводил по первым столбцам.
Версия 5.9.9.1
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Здравствуйте. Столкнулся с такой проблемой и пока не смог ее решить, по поиску тоже ничего не нашел нужного (если кто-то наткнется на похожую тему, буду благодарен ссылке).
Собственно в чем дело:
Есть excel таблица, и есть C# код для поиска по этой таблице нужной строки.
Вот сам код:
Код:
var textContains = project.Variables["aaa"].Value;
var sourceTable = project.Tables["bbb"];
lock(SyncObjects.TableSyncer)
{
for(int i=0; i < sourceTable.RowCount; i++)
{
var cells = sourceTable.GetRow(i).ToArray();
if (cells[19].Contains(textContains))
{ return i;
}
}
}

return "No info!";
По нему должен проходить поиск в таблице "bbb" по значению из переменной "aaa".
Столбец из таблицы берется под буквой T (20й по счету).
Когда выполняется проект, на данном коде выдается ошибка:
"Выполнение действия CSharp Owncode индекс находился вне границ массива".
Однако, если через ПМ открыть таблицу, нажать "просмотр содержимого", а потом закрыть и запустить еще раз код, то все идет как надо, и находит ту строку, которую надо.

Может я что-то не так делаю, но данный код хорошо зарекомендовал себя, когда поиск проводил по первым столбцам.
Версия 5.9.9.1
Код:
var textContains = project.Variables["aaa"].Value;
var sourceTable = project.Tables["bbb"];
int count = sourceTable.RowCount-1;
lock(SyncObjects.TableSyncer)
{
for(int i=0; i < count; i++)
{
var cells = sourceTable.GetCell(19,i);
if (cells.Contains(textContains))
{return i;
}
}
}
return "No info!";

так попробуйте.
 
  • Спасибо
Реакции: art22 и Dark_Keel

Dark_Keel

Client
Регистрация
17.05.2016
Сообщения
3
Благодарностей
0
Баллы
1
Код:
var textContains = project.Variables["aaa"].Value;
var sourceTable = project.Tables["bbb"];
int count = sourceTable.RowCount-1;
lock(SyncObjects.TableSyncer)
{
for(int i=0; i < count; i++)
{
var cells = sourceTable.GetCell(19,i);
if (cells.Contains(textContains))
{return i;
}
}
}
return "No info!";

так попробуйте.

Спасибо огромное, заработало. А я уже думал о переформатировании таблицы :ay:
 

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