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

dr.reklam

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

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

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

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

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

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

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

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

djaga

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

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

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

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

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

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

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

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

dr.reklam

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

BAZAg

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

Sho

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

Sergodjan

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

dr.reklam

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

dr.reklam

Client
Регистрация
02.06.2020
Сообщения
58
Благодарностей
15
Баллы
8
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
Сообщения
58
Благодарностей
15
Баллы
8
Проблема была решена, причина ошибки была следующей:
В одной из ячеек я добавил вручную значения с символом ";" а он является разделителем столбцов, и zennoposter тут же создает новый столбец, последовательность столбцов сбивается и появляется один пустой столбец из которого zennoposter пытается взять значения, но т.к. ячейки пустые, то он выдает ошибку. А первую строку берет потому что в нее записались значения после разделителя.
 
  • Спасибо
Реакции: fauux-wrd

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