Как обновить поля на основе значения раскрывающегося списка в Google Forms? - PullRequest
1 голос
/ 17 октября 2019

Мы используем Google Forms для сбора данных от наших представителей на местах, пока они находятся на рабочем месте. Мы используем скрипт для заполнения выпадающих значений для 4 различных полей, который запускается периодически. Это избавляет их от необходимости набирать его и, возможно, допускать ошибки.

Все эти поля предопределены, поэтому, если они выбирают Проект № 1, мы уже знаем значения адреса, менеджера и клиента. Значения хранятся на второй вкладке формы результатов и теоретически могут использоваться для поиска.

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

Могу ли я сделать свои собственные триггеры? Если бы у меня был триггер для изменения идентификатора проекта, я бы подумал, что могу обновить другие из электронной таблицы.

Или, если бы был триггер OnNextPage, который я мог бы использовать для заполнения этих значений.

Есть ли способ добавить / изменить значения при отправке формы?

Я думаю, что я хочу сделать следующее (спасибо @OMilo), но я борюсь с поиском:

function onFormSubmit (e) {Logger.log ("[METHOD] onFormSubmit");

sendEmail (e.range);}

function sendEmail (range) {

// Здесь мы получаем выбор пользователей, выбранных в форме: var itemResponse = e.response.getItemResponses () [1557784536];// Используем любой индекс для элемента, в моем случае это 0. var kmbProjectNumber = itemResponse.getResponse ();

//LOOKUP KMB PROJECT NUMBER IN SHEET: "New - KMB Design Visit Closeout (Responses)" TAB: "KMB Lookups"
var ss = SpreadsheetApp.OpenByID('REDACTED');
var lookups = ss.getSheetByName("KMB Lookups");

//In Column named'KMB Project ID' find record from bottom where value = kmbProjectNumber
//Get value for column named 'Site Address'
//Get value for column named 'KMB Project Manager'
//Get value for column named 'Client Assigning this Work'

// FETCH SPREADSHEET //
var values = range.getValues();
var row = values[0];

//WRITE FOUND VALUES TO SPREADSHEET
//Set row[3] to Site Address
//Set row[4] to Project Manger
//Set row[5] to Client

var svProjectManager = row[4]; //Update manually  //E
var svClient = row[5]; //Update manually  //F

// EXTRACT VALUES //
var svTimeStamp = row[0];  //A
var svInitials = row[1];  //B
var svProjectID = row[2];  //C
var svSiteAddress = row[3];  //Update manually    //D
var svProjectManager = row[4]; //Update manually  //E
var svClient = row[5]; //Update manually  //F
var svNOCNeeded = row[6];  //G


// PREPARE EMAIL //
var emailRecipients = "REDACTED";
var emailSubject = "Field Visit Completed for "+svProjectManager+" "+svProjectID;
var emailBody = ""  //Format using variables set

// SEND EMAIL //

}

1 Ответ

1 голос
/ 18 октября 2019

Вам не нужно включать эти поля в саму форму. Вместо этого вы можете установить разные значения в зависимости от того, какую опцию они выбирают в функции, которая запускается триггером onFormSubmit .

Я написал небольшой пример, чтобы показать, как это можно сделать.

Сначала создайте триггер onFormSubmit, если вы этого еще не сделали:

function createTrigger() {
  var form = FormApp.openById('your_form_id'); // Change accordingly
  ScriptApp.newTrigger('getData')
    .forForm(form)
    .onFormSubmit()
    .create();
}

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

function getData(e) {
  // Here we get choice the users selected in the form:
  var itemResponse = e.response.getItemResponses()[0]; // Use whatever index is the item, in my case it's 0.
  var response = itemResponse.getResponse();
  var values = getDataFromSheet(); // Getting the values from the sheet
  for(var i = 1; i < values.length; i++) { // Checking which row from the sheet corresponds to the choice selected in the form
    var row = values[i];
    if(row[2] == response) { // Checks if current sheet row is the one selected in the form submission
      var emailData = { // Data for email to be sent is assigned depending on form choice and sheet data
        project: row[2],
        address: row[3],
        manager: row[4],
        client: row[5]
      }
    }
  }
  // Preparing email parameters
  var emailBody = emailData["address"] + " - " + emailData["manager"] + " - " + emailData["client"];
  var emailSubject = "Field Visit Completed for " + emailData["manager"] + " " + emailData["project"];
  var emailRecipient = 'valid email'; // Change accordingly
  // Sending email
  MailApp.sendEmail(emailRecipient, emailSubject, emailBody);
}

В приведенной выше функции вызывается getDataFromSheet:

function getDataFromSheet() {
  var ss = SpreadsheetApp.openById('your_spreadsheet_id'); // Change accordingly
  var lookups = ss.getSheetByName("KMB Lookups");
  var values = lookups.getDataRange().getValues();
  return values;
}

Надеюсь, это полезно для вас.

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