Форма электронной таблицы Google, заполнение параметров формы на основе электронной таблицы

#google-apps-script #google-forms

#google-apps-script #google-forms

Вопрос:

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

Ответ №1:

Это возможно. Напишите в электронной таблице свой собственный скрипт для обновления формы. Если вы не знакомы с написанием скрипта, вы можете найти чей-нибудь в галерее скриптов Google. Давайте посмотрим пример моего скрипта. Сценарий предназначен для обновления двух списков.

 function updateForm(){
  // a way to get the items from the form
  var form = FormApp.openById("<your form id>");
  var agentList = form.getItemById(<your item id>).asListItem();
  var hotelList = form.getItemById(<your item id>).asListItem();


  var ss = SpreadsheetApp.getActive();
  var agents = ss.getSheetByName("Agents");
  var hotels = ss.getSheetByName("Hotels");

  // get the values in the first column accept header row 1
  var agentValues = agents.getRange(2, 1, agents.getMaxRows() - 1).getValues();
  var hotelValues = hotels.getRange(2, 1, hotels.getMaxRows() - 1).getValues();

  var agentNames = [];
  var hotelNames = [];

  // convert 2D to 1D array and ignore empty cells
  for(var i = 0; i < agentValues.length; i  ) {  
    if(agentValues[i][0] != "") {
      agentNames[i] = agentValues[i][0];
    }
  }

  for(var i = 0; i < hotelValues.length; i  ) {
    if(hotelValues[i][0] != "") {
      hotelNames[i] = hotelValues[i][0];
    }
  }

  // populate the list
  agentList.setChoiceValues(agentNames);
  hotelList.setChoiceValues(hotelNames);
}
  

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

Комментарии:

1. Итак, я не совсем уверен, что понимаю, куда мне следует скопировать этот скрипт, чтобы заполнить мою форму Google. А как насчет идентификатора листа? Спасибо.

2. @monchai как мне получить идентификатор элемента из формы? вместо <ваш идентификатор элемента>

3. Проведя некоторое исследование, я думаю, что @monchai ссылался на скрипты приложений developers.google.com/apps-script/quickstart/docs

Ответ №2:

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

Всегда есть возможность создать форму, используя параметры URL, как описано здесь: https://docs.google.com/support/bin/answer.py?hl=enamp;answer=160000

Ответ №3:

Попробуйте приведенный ниже код. Вы можете вызвать ее с помощью кнопки или пункта меню.

 //
//
const populateGoogleForms = () => {
  const GOOGLE_SHEET_NAME = "Setup";
  var GOOGLE_FORM_ID = "xxx"; //
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const [header, ...data] = ss
    .getSheetByName(GOOGLE_SHEET_NAME)
    .getDataRange()
    .getDisplayValues();

  var choices = {};
  header.forEach((title, i) => {
    choices[title] = data.map((d) => d[i]).filter((e) => e);
  });``
  FormApp.openById(GOOGLE_FORM_ID)
    .getItems()
    .map((item) => ({
      item,
      values: choices[item.getTitle()],
    }))
    .filter(({ values }) => values)
    .forEach(({ item, values }) => {
      switch (item.getType()) {
        case FormApp.ItemType.CHECKBOX:
          item.asCheckboxItem().setChoiceValues(values);
          break;
        case FormApp.ItemType.LIST:
          item.asListItem().setChoiceValues(values);
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item.asMultipleChoiceItem().setChoiceValues(values);
          break;
        default:
        // ignore item
      }
    });
};