Формирование таблиц Google на основе ответов формы
Я пытаюсь заставить форму Google заполнять электронную таблицу несколькими строками на основе 1 введенных данных, например:
- Форма проста с минимальным количеством информации о клиенте https://docs.google.com/forms/d/1LrKlVuI7kxVU0lxz70Uu-2Obj4x3qIwe6nS-ErzbCAg/
- В зависимости от выбранного количества деталей, необходимых заказчику (на данный момент 1, 2 или 3), форма переходит в разделы, где вводятся 1, 2 или 3 с указанием названия детали и идентификационного номера https://docs.google.com/spreadsheets/d/1kAsgrB-2swL_tWYyXF5GLLX2PkVrkHYkcKr9eaQ8gnI/edit?usp=sharing
После ввода мне нужно, чтобы формы вводили данные в лист (или форматированный лист) следующим образом: -Каждая введенная часть (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
вместо этого используется цикл), но имена полей формы не согласуются друг с другом, что затрудняет использование этой опции. Из-за этого функция имеет изрядное количество повторений. Я бы порекомендовал исправить имена полей и немного переписать функцию.