#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
}
});
};