Это связано с тем, что скрипт просто «очищает» все данные из строк с помощью вызова метода clear()
.Если вы хотите убедиться, что строка удалена из структуры Spreadsheet
, используйте метод deleteRow()
или deleteRows()
.
Ps Хотя getLastRow()
может заставить вас поверить в обратное, если вы проверили числострок с ним, в документации четко указано, что она насчитывает только строк с содержанием , пропуская, таким образом, пустые строки, clear()
.
Уточнение
Возможно, мой ответ не был достаточно ясным о том, почему вы должны обратиться к SpreadsheetApp
вместо FormApp
.Проблема здесь в том, что вы сохраняете количество строк в листе при вызове метода clear()
, а формы всегда отправляют ответ в следующую строку после последней независимо от того, содержит ли он данные или нет (вот почему "он продолжает, как если бы предыдущая строка таблицы была заполнена" - строк-заполнителей осталось без данных).
Тест
Вы можете увидеть разницу сами, запустив эту функцию (метод getMaxRows()
возвращает каждую строку независимо от ее содержимого):
function getNumRows() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getActiveSheet();
var initial = sh.getMaxRows();
Logger.log('Initial number of rows: '+initial);
sh.appendRow(['test']);
var plusOne = sh.getRange(sh.getMaxRows(), 1, 1, sh.getLastColumn());
plusOne.clear();
var cleared = sh.getMaxRows();
Logger.log('Number of rows after clearing: '+cleared);
sh.deleteRow(sh.getMaxRows());
var deleted = sh.getMaxRows();
Logger.log('Number of rows after deletion: '+deleted);
}
WYSIWYG
Если вы все еще не верите мне, вот пример, который я создал и протестировал ваш случай - как вы можете видеть, результат отличается в зависимости от использования deleteRow()
метод или clear()
и не имеет ничего общего с перезаписываемой формой или нет (я вообще не вызываю метод deleteAllResponses()
).
Полезные ссылки
deleteRow()
reference ; getLastRow()
ссылка ; getMaxRows()
ссылка ; clear()
ссылка ;