Ошибка "Выполнение действия Table Индекс за пределами диапазона." Помогите составить альтернативный вариант через C#

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
72
Благодарностей
30
Баллы
18
В стандартном экшене "Взять строку" указаны настройки: гугл-таблица, взять строки, под номерами, в качестве номеров указана переменная, далее результат помещается в переменные, т.ч. ячейки строки распределяются по заданным переменным.

Ошибка:
Выполнение действия Table Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

Ранее около месяца все исправно работало. Строки в гугл-таблице имеются, через PM их также видно, более того экшеном получаю количество строк которое совпадает с реальным.

Ошибка показывается и если заменить номера строк с переменной на число.

Если поменять настройку экшена и указать "взять первую строку", т.е. экшен выполняется.

На форуме решения не нашел, пробовал повторить через C#, но не нашел готовый вариант, а сам даже из разных обрывков правильно не смог составить.

Техподдержка 4 дня не отвечает, помогите составить С# код, может через него не будет ошибки, или хотябы index можно будет как-то менять, что в стандартном экшене нельзя.

Пожалуйста помогите составить простой код:
Код должен брать строку с определенным номером, номер является переменной. Из взятой строки нужно каждую ячейку отправить в соответствующую переменную (для примера достаточно 2х ячеек).
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
564
Благодарностей
1 146
Баллы
93
В стандартном экшене "Взять строку" указаны настройки: гугл-таблица, взять строки, под номерами, в качестве номеров указана переменная, далее результат помещается в переменные, т.ч. ячейки строки распределяются по заданным переменным.

Ошибка:
Выполнение действия Table Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index

Ранее около месяца все исправно работало. Строки в гугл-таблице имеются, через PM их также видно, более того экшеном получаю количество строк которое совпадает с реальным.

Ошибка показывается и если заменить номера строк с переменной на число.

Если поменять настройку экшена и указать "взять первую строку", т.е. экшен выполняется.

На форуме решения не нашел, пробовал повторить через C#, но не нашел готовый вариант, а сам даже из разных обрывков правильно не смог составить.

Техподдержка 4 дня не отвечает, помогите составить С# код, может через него не будет ошибки, или хотябы index можно будет как-то менять, что в стандартном экшене нельзя.

Пожалуйста помогите составить простой код:
Код должен брать строку с определенным номером, номер является переменной. Из взятой строки нужно каждую ячейку отправить в соответствующую переменную (для примера достаточно 2х ячеек).
Скорее всего где-то в коде или кубиках отсчет указан с нуля, а нужно с единицы.
Приведите кусок кода или скриншоты кубиков и их значений, где вываливается ошибка. Как правило, в логе прям написана строка где.
 

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
72
Благодарностей
30
Баллы
18
Если брать номер строки взять на один меньше на любое число меньше, все равно не берется, а вот если взять строку 0, то экшен сам меняется на с типа "Под номерами" на тип "Первую" и строка берется. У меня через кубик, в логе пишется только то, что указал выше.
95615
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 900
Благодарностей
2 638
Баллы
113
Код должен брать строку с определенным номером, номер является переменной. Из взятой строки нужно каждую ячейку отправить в соответствующую переменную (для примера достаточно 2х ячеек).
C#:
var tb = project.Tables["tb"]; // таблица
int row = int.Parse(project.Variables["row"].Value); // Номер строки например 5

int count = tb.RowCount; // получаем количество строк в таблице

// Выходим по ошибке, если строк меньше чем надо
if(count <= row) throw new Exception(string.Format("В таблице: {0} Хотим:{1} Ошибка, в таблице меньше строк чем надо", count, row));

// Получаем строчку таблички по номеру
string[] row_data = tb.GetRow(row).ToArray();

// Записываем результат в переменные
if(row_data.Length > 0) project.Variables["cell1"].Value = row_data[0]; // Берем первую ячейку в переменную cell1
if(row_data.Length > 1) project.Variables["cell2"].Value = row_data[1]; // Берем вторую ячейку в переменную cell2
 

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28
C#:
var tb = project.Tables["tb"]; // таблица
int row = int.Parse(project.Variables["row"].Value); // Номер строки например 5

int count = tb.RowCount; // получаем количество строк в таблице

// Выходим по ошибке, если строк меньше чем надо
if(count <= row) throw new Exception(string.Format("В таблице: {0} Хотим:{1} Ошибка, в таблице меньше строк чем надо", count, row));

// Получаем строчку таблички по номеру
string[] row_data = tb.GetRow(row).ToArray();

// Записываем результат в переменные
if(row_data.Length > 0) project.Variables["cell1"].Value = row_data[0]; // Берем первую ячейку в переменную cell1
if(row_data.Length > 1) project.Variables["cell2"].Value = row_data[1]; // Берем вторую ячейку в переменную cell2
Привет форум.
А такое можно реализовать в maker кубиками?
Или может есть уроки по работе с таблицей?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 900
Благодарностей
2 638
Баллы
113
Привет форум.
А такое можно реализовать в maker кубиками?
Или может есть уроки по работе с таблицей?
Так логика та же самая - сначала получаем сколько строк в таблице, и берем данные только если в табличке есть достаточное количество данных.
95632
 
  • Спасибо
Реакции: Sho

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
21 751
Благодарностей
9 686
Баллы
113
а вот если взять строку 0, то экшен сам меняется на с типа "Под номерами" на тип "Первую" и строка берется.
Строка с номером 0 - это как раз и есть Первая строка.
То что 0 заменяется на Первая - это уже давно так работает и в этом поведении нет бага.
 
  • Спасибо
Реакции: Sho

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
72
Благодарностей
30
Баллы
18
Строка с номером 0 - это как раз и есть Первая строка.
То что 0 заменяется на Первая - это уже давно так работает и в этом поведении нет бага.
Я это написал не для обозначения бага, а показать, что первую строку берет, следовательно уже исключается ряд причин связанных с гугл-таблицами
 
  • Спасибо
Реакции: starters и Sergodjan

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
72
Благодарностей
30
Баллы
18
C#:
var tb = project.Tables["tb"]; // таблица
int row = int.Parse(project.Variables["row"].Value); // Номер строки например 5

int count = tb.RowCount; // получаем количество строк в таблице

// Выходим по ошибке, если строк меньше чем надо
if(count <= row) throw new Exception(string.Format("В таблице: {0} Хотим:{1} Ошибка, в таблице меньше строк чем надо", count, row));

// Получаем строчку таблички по номеру
string[] row_data = tb.GetRow(row).ToArray();

// Записываем результат в переменные
if(row_data.Length > 0) project.Variables["cell1"].Value = row_data[0]; // Берем первую ячейку в переменную cell1
if(row_data.Length > 1) project.Variables["cell2"].Value = row_data[1]; // Берем вторую ячейку в переменную cell2
Этот код к сожалению для обычных таблиц, а нужно именно с гугл-таблицами.
Отредактировал для гугл-таблиц вроде правильно, однако возникает та же ошибка как и с экшеном."
Выполнение действия CSharp OwnCode. Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index"
Если выбрать в переменной номер строки 0, то данные успешно берутся.
Вот отредактированный код:
C#:
string GTableName = "справочник"; // таблица
int row = int.Parse(project.Variables["number_str"].Value); // Номер строки например 5

int count = project.GoogleSpreadsheets[GTableName].RowCount; // получаем количество строк в таблице

// Выходим по ошибке, если строк меньше чем надо
if(count <= row) throw new Exception(string.Format("В таблице: {0} Хотим:{1} Ошибка, в таблице меньше строк чем надо", count, row));

// Получаем строчку таблички по номеру
string[] row_data = project.GoogleSpreadsheets[GTableName].GetRow(row).ToArray();

// Записываем результат в переменные
if(row_data.Length > 0) project.Variables["tip_acc"].Value = row_data[0]; // Берем первую ячейку в переменную cell1
if(row_data.Length > 1) project.Variables["name_site_seller"].Value = row_data[1]; // Берем вторую ячейку в переменную cell2
 
Последнее редактирование:

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
72
Благодарностей
30
Баллы
18
Проблема была решена, причина ошибки была следующей:
В одной из ячеек я добавил вручную значения с символом ";" а он является разделителем столбцов, и zennoposter тут же создает новый столбец, последовательность столбцов сбивается и появляется один пустой столбец из которого zennoposter пытается взять значения, но т.к. ячейки пустые, то он выдает ошибку. А первую строку берет потому что в нее записались значения после разделителя.
 
  • Спасибо
Реакции: Tsogoevs и fauux-wrd

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