Формирование таблиц Google на основе ответов формы

Я пытаюсь заставить форму Google заполнять электронную таблицу несколькими строками на основе 1 введенных данных, например:

После ввода мне нужно, чтобы формы вводили данные в лист (или форматированный лист) следующим образом: -Каждая введенная часть (1, 2 или 3) должна быть в отдельной строке с одним и тем же именем клиента в целом

  • После этого редакторы листов могут вводить данные в дополнительные строки, такие как "Дата доставки" и "Цена товара".

Вкратце: 1 форма отправлена, 3 вопроса в форме, 3 строки

Раскраска ячеек ps используется только для указания общих данных между строками

1 ответ

Решение

Один из вариантов - сделать следующее:

№1. Установите триггер onFormSubmit:

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

Триггер можно установить вручную, выполнив следующие действия, или программно. Чтобы установить триггер программно, откройте скрипт, привязанный к вашей электронной таблице, нажавTools > Script editor, и скопируйте и выполните эту функцию один раз:

function createTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("submitData")
    .forSpreadsheet(ss)
    .onFormSubmit()
    .create();
}

Это запустит функцию с именем submitDataкаждый раз при отправке формы. Затем следует написать функцию, которая должна добавлять представленные данные в желаемом формате.

№2. Функция добавления представленных данных в лист:

Чтобы добавить данные, отправленные через Форму, на лист под названием Formated responses, вам необходимо использовать соответствующий объект события, который содержит отправленные данные. Вы можете использовать это, чтобы проверить, сколько частей было отправлено, и значения для соответствующих полей. Затем можно использовать метод appendRow для добавления этих данных на лист.

Это могло быть что-то вроде этого:

function submitData(e) {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Formated responses");
  var res = e.namedValues;
  var numberOfParts = res["Number of parts"][0];
  var mainFields = [res["Timestamp"][0], res["Client name"][0], numberOfParts];
  switch (numberOfParts) {
    case '1':
      var fieldsOne = [res["Part identification number"][0], res["Part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsOne));      
      break;
    case '2':
      var fieldsTwo = [res["#1 part identification number"][0], res["#1 part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsTwo));
      fieldsTwo = [res["#2nd part identification number"][0], res["#2nd part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsTwo));
      break;
    case '3':
      var fieldsThree = [res["#1st part identification number"][0], res["#1st part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsThree));
      fieldsThree = [res["#2nd part identification number"][1], res["#2nd part name"][1]];
      sheet.appendRow(mainFields.concat(fieldsThree));
      fieldsThree = [res["#3rd part identification number"][0], res["#3rd part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsThree));
      break;
  }
}

Заметка:

  • Функция submitData можно было бы сделать проще (switch может быть удален, а forвместо этого используется цикл), но имена полей формы не согласуются друг с другом, что затрудняет использование этой опции. Из-за этого функция имеет изрядное количество повторений. Я бы порекомендовал исправить имена полей и немного переписать функцию.

Справка:

Другие вопросы по тегам