Как автоматически обновить выпадающий список в форме Google на основе диапазона в Google Sheets? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть форма Google с раскрывающимся списком (см. Ниже) enter image description here

У меня есть столбец на листе Google, который обновляется каждый день.

enter image description here

Можно ли каким-либо образом автоматически связать имена из листа Google с выпадающим списком формы Google Вопрос 1, чтобы каждый раз при обновлении листа дополнительным именем - Форма Google автоматически обновляется с именем в раскрывающемся списке. Я полагаю, нам нужно будет использовать Google AppScript. Будем благодарны за любые указания, указывающие мне правильное направление.

1 Ответ

2 голосов
/ 23 марта 2020

Очень общий c сценарий, но вы можете изменить его, как считаете нужным

function updateForm(){

  var ss = SpreadsheetApp.openById('----------'); // ID of spreadsheet with names
  var sheet = ss.getSheetByName('Names'); // Name of sheet with range of names
  var nameValues = sheet.getRange('A2:A10').getValues(); // Get name values

  var form = FormApp.openById('---------');  // ID of form
  var formItems = form.getItems();
  var question = formItems[2].asListItem(); // Get the second item on the from 

  var names = []

  for(var x = 1; x < nameValues.length; x++){

    if(nameValues[x][0] != ""){ // Ignores blank cells
     names.push(question.createChoice(nameValues[x][0])) // Create an array of choice objects
   } 
  }
  var setQuestion1 = question.setChoices(names); // Update the question

}

Чтобы обновить форму при редактировании листа, вы можете использовать установленный триггер onEdit. С добавлением logi c вы можете ограничить обновление формы только тем, что происходит при редактировании определенного диапазона.

В этом примере форма будет обновляться только после внесения изменений в столбец A листа «Имена»

function updateForm(e){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var sheetName = sheet.getSheetName();
  var getCol = e.range.getColumn(); 

  if(sheetName == 'Names' && 1){

  var nameValues = sheet.getRange('A2:A10').getValues(); // Get name values

  var form = FormApp.openById('---------');  // ID of form
  var formItems = form.getItems();
  var question = formItems[2].asListItem(); // Get the second item on the from 

  var names = []

  for(var x = 1; x < nameValues.length; x++){

    if(nameValues[x][0] != ""){ // Ignores blank cells
     names.push(question.createChoice(nameValues[x][0])) // Create an array of choice objects
   } 
  }
  var setQuestion1 = question.setChoices(names); // Update the question
  }
}
...