Функция "Мои листы Google" выполняет свою работу при запуске из редактора, но дает другой результат при запуске с помощью отправки формы - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть форма Google и лист, который собирает ответы, которые, конечно, всегда появляются внизу. Я использовал следующий сценарий для копирования последнего ответа (который всегда находится в последней строке) из листа ответов (ответы формы 2) в строку два другого листа (все ответы). При запуске триггером при отправке формы сценарий вставляет пустую строку во все ответы, а затем копирует значения в другую строку над пустой строкой. Пожалуйста, не могли бы вы помочь и скажите мне, почему и как я могу изменить скрипт, чтобы пустая строка не добавлялась:

function CopyLastrowformresponse () {
var ss = SpreadsheetApp.getActive();
var AR = ss.getSheetByName("All Responses");
var FR = ss.getSheetByName("Form responses 2");
var FRlastrow = FR.getLastRow();

AR.insertRowBefore(2);
FR.getRange(FRlastrow, 1, FRlastrow, 22).copyTo(AR.getRange("A2"), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

  }

1 Ответ

1 голос
/ 11 ноября 2019

Несколько вещей может происходить здесь.

  1. Вы получаете число строк, равное FRlastrow, когда я думаю, что вы хотите получить только 1 строку.
  2. Сценарий приложения имеет некорректное поведение с onFormSubmit()триггеры, поэтому вы можете проверить дубликаты триггеров (см. этот ответ ).
  3. Сценарий не полностью использует объект события , предоставленный onFormSubmit(). В частности, вместо получения последней строки с одного листа, вы можете использовать e.values, то есть те же самые данные.

Я бы изменил сценарий на что-то вроде этого:

function CopyLastrowformresponse (e) {
  if (e.values && e.values[1] != "") { // assuming e.values[1] (the first question) is required
    SpreadsheetApp.getActive()
      .getSheetByName("All Responses")
      .insertRowBefore(2)
      .getRange(2, 1, 1, e.values.length)
      .setValues([e.values]);
  }
}

Но, в конечном счете, если все, что вам нужно, это просто изменить порядок результатов, тогда я бы вообще отказался от скрипта Apps и просто использовал =SORT()функция.

=SORT('Form responses 2'!A:V, 'Form responses 2'!A:A, FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...