У меня есть сценарий приложений на стороне сервера, который вставляет новую строку в таблицу Google, а затем добавляет данные в соответствующие столбцы. Вот краткий фрагмент кода того, что он делает:
//check to see what is the last row of the sheet
var last_row = sheet.getLastRow();
//then, insert a new row after the last detected row
sheet.insertRowAfter(last_row);
//then, set current work row to last_row + 1, then do some adding data.
//Here, we add a current_timedate Date object that was created earlier.
var current_row = last_row + 1;
var current_timedate_cell = 'A' + current_row;
sheet.getRange(current_timedate_cell).setValue(current_timedate);
Это все довольно стандартные вещи. Тем не менее, я заметил, что если я вызываю функцию, которая делает все это довольно быстро из интерфейса переднего плана (у меня есть другой интерфейс javascript / html на стороне клиента, который вызывает функцию javascript на стороне сервера с методом onClick на кнопке), он начинает пропускать строки , Также, кажется, есть некоторые причудливые проблемы параллелизма. В некоторые строки вставлены частичные данные, но только для флажков, которые я добавляю. Ничего другого не добавляется. Я не могу сказать, есть ли смешивание данных между строками, так как все данные повторяются. Таким образом, я не могу сказать, находится ли столбец H строки 2 в столбце H строки 3 и т. Д. Если честно, я вставляю одну КРУПНУЮ ячейку в строку до предела в 50 тыс. Символов. Таким образом, каждый ряд, вероятно, близок к 50К. Это может быть причиной этих проблем
Может ли кто-нибудь представить некоторые идеи? Я знаю, что Google Sheets не должен быть реляционной базой данных с целостностью ACID и одновременной производительностью. Но я думал, что лучше справится со вставками по 50 КБ.
Я пробовал SpreadsheetApp.flush (). Я немного осведомлен об ограничениях скорости, и, возможно, это может быть так. Я иногда делаю вставки со скоростью около 3 вставок в секунду. Я дважды проверю пределы квоты. Но 3 / секунда не кажется невероятно высокой.
Ожидаемые результаты: вставлены все данные, запрашиваемые для вставки
Фактические результаты: множество пропущенных строк на более высоких скоростях вставки
Я делаю все это в блоке try / catch, и пока я не получаю никаких ошибок. При возникновении ошибки я одновременно регистрирую его в Logger и отправляю по электронной почте самому себе через MailApp.