insertRowBefore последней строки, возвращающей ошибку - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть скрипт, который (брутто, я знаю) пишет в электронную таблицу.Он динамически добавляет и удаляет строки на основе входных данных с другого листа.Мне нравится делать это, потому что пользователь должен скопировать и вставить полученные данные, отформатированные в таблицу, в электронное письмо после (давайте пока пропустим создание электронного письма непосредственно из этого скрипта, это вторая часть).

Я решил, что самый простой способ сообщить сценарию, куда вставлять новые данные, - это всегда вставлять строку перед самой последней строкой электронной таблицы и вставлять указанные данные.

Я использовал getMaxRows (), getLastRow () и insertRowBefore (), но все комбинации этих функций возвращают ошибку «эти строки выходят за границы»!Я действительно не понимаю, что происходит.Я использую логи и вижу, что переменные getLastRow () и getMaxRows обновляются после того, как я сделал некоторое копирование таблицы шаблонов на лист, который затем «вставляет» строки.По некоторым причинам, даже после повторного вызова функций getMaxRows () и getLastRow () они не распознают новые строки.Скрипт все еще может манипулировать этими новыми строками.

Это наводит меня на мысль, что getMaxRows () и getLastRow () могут получать информацию о количестве строк в листе только при первом запуске скрипта или только при первой активации листа?Кто-нибудь сталкивался с этой проблемой раньше?У кого-нибудь есть подробности о том, как работают эти две функции?Страница класса GAS 'sheet' не помогла.

spread = SpreadsheetApp.getActiveSpreadsheet();
emailsSheet = spread.getSheetByName("emails");
emailsMaxRows = emailsSheet.getMaxRows(); //# of rows regardless of content.
emailsSheet.deleteRows(2,emailsMaxRows-1); //I want to start from scratch each time I run the script, having just 1 row from which I append 'template' boxes where I can put data for the user to copy and paste into emails.
emailsMaxRows = emailsSheet.getMaxRows(); //now that I've deleted, Logger.log() shows that getMaxRows() correctly updates with just 1 row.
emailsSheet.insertRowsBefore(emailsMaxRows, 2);//insert two more, so there are 3 rows in the sheet.
emailsMaxRows = emailsSheet.getMaxRows(); //logger correctly shows 3
templateEmail = spread.getRangeByName("templateEmail"); //email template, A1:E5
templateEmail.copyTo(emailsSheet.getRange(emailsMaxRows,1)); //paste a table of 5 rows to row 3, so there are 7 total.
emailsMaxRows = emailsSheet.getMaxRows(); //should be 7, no?
//NO. Logger shows MaxRow is still 3, how come????? I can visibly see in the sheet there are 7 rows, with formatting and text. I simply don't understand how getMaxRows() doesn't update to return 7.

Мне нужно либо getMaxRows (), либо getLastRow () для корректного обновления каждый раз, когда я удаляю или вставляю строку, почему они не могут этого сделатьдля меня?

1 Ответ

0 голосов
/ 13 сентября 2018

SpreadsheetApp.flush () исправил проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...