Как обойти перезатирание строк при большом количестве вызовов скрипта, создающего новые строки?

Есть скрипт, который создает в таблице новые строки с данными
....
var NewRow = sheet.getLastRow()+1;
...
sheet.getRange("A"+NewRow).setValue(date);
....

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

Возможно, есть какой-то альтернативный способ записывать данные в новые строки?
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
@rPman
Попробуй хранить количество записей (точнее первую пустую строку после таблицы) в этой же таблице. Таким образом получай строку, в которую нужно сохранять запись и увеличивай значение в одной строке (не то чтобы это было атомарно но наверняка это значительно уменьшит вероятность коллизий)
var seq=sheet.getRange("A1");
seq.setValue((newRowNum=seq.getValue())+1);

благодаря этому каждый экземпляр запущенного скрипта с самого начала получит свой номер строки

либо ищи другое место хранения этого сиквенса, в котором есть атомарная операция seq_id=seq++
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы