Не срабатывает скрипт переноса строки

14 views
Skip to first unread message

Dyushik Dju

unread,
Feb 16, 2022, 5:51:35 AMFeb 16
to contributor.pw

В рабочей таблице есть два листа. Нужно, чтобы после того, как во втором столбце прописывается слово “доставлено”, строка переносилась на второй лист и удалялась с первого листа.

Пименили скрипт:

let ss = SpreadsheetApp.getActiveSpreadsheet();

let transitSheet = ss.getSheetByName('В транзите');

let dostavkaSheet = ss.getSheetByName('Доставлено');

function onEdit(e) {

  let cell = e.range;

  if (cell.getSheet().getSheetName() === transitSheet.getSheetName()){

    if (cell.getValue() === 'доставлено'){

      transitSheet.getRange(cell.getRow(), 1, 1, transitSheet.getLastColumn()).copyTo(dostavkaSheet.getRange(dostavkaSheet.getLastRow() + 1, 1));

      transitSheet.deleteRow(cell.getRow());

    }

  }

}

 

Тестировали скрипт на скопированном фрагменте рабочей таблицы в другой таблице, он срабатывал. Перенесли скрипт в рабочую таблицу, не срабатывает.

При первом приближении разница в таблицах только в количестве человек, которые с ними работают.
Если запускать скрипт в окне редактирования скрипта, ошибка одинаковая в обоих скриптах в обоих таблицах: TypeError: Cannot read property 'range' of undefined    onEdit @ Код.gs:5.

Вопрос: Влияют ли настройки доступа на работу скрипта? Что нужно посмотреть, чтобы понять, почему скрипт не отрабатывает.

Alexander Ivanov ✔

unread,
Feb 17, 2022, 12:48:08 AMFeb 17
to contributor.pw
Наличие оператора let указывает, что автор кода не совсем понимает, что делает.
Проблема, по которой вы получаете ошибку в том, что вы запускаете скрипт из редактора, а нужно как триггер.

Dyushik Dju

unread,
Feb 18, 2022, 7:32:04 AMFeb 18
to contributor.pw
А если опустить момент запуска из редактора.
Почему этот скрипт может срабатывать в одной таблице, но не срабатывает в другой? 
В тестовой таблице работает три человека, у всех строка переносится, если написать доставлено.
В рабочей ни у кого не переносится

четверг, 17 февраля 2022 г. в 08:48:08 UTC+3, Alexander Ivanov ✔:

Alexander Ivanov ✔

unread,
Feb 18, 2022, 11:27:37 PMFeb 18
to contributor.pw

Ага, это уже особенность авторизации. Скрипт должен быть инициализирован тем, кто его запускает. В вашем случае достаточно, чтобы владелец проекта скрипта один раз запустил любую функцию хоть и с ошибкой, лишь бы получить права на запуск. В идеале вы должны зарегистрировать устанавливаемый триггер через специальный раздел редактора скриптов или программным способом. На данный момент это простой триггер, а не устанавливаемый, он имеет ряд существенных ограничений.
Reply all
Reply to author
Forward
0 new messages