Сценарий приложения вставляет новую строку и значения в Google Sheet.Тем не менее, он как-то пропускает строки, если вы отправляете слишком быстро - PullRequest
1 голос
/ 11 июня 2019

У меня есть сценарий приложений на стороне сервера, который вставляет новую строку в таблицу 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.

1 Ответ

1 голос
/ 12 июня 2019

Просто добавлю это как ответ вместо комментария, так как он ответил на вопрос:

Используйте appendRow() вместо insertRowAfter() для этой цели.

...