Преобразование сценария «Создать вопрос с несколькими вариантами ответов из электронной таблицы» в «Создать флажок и c». ошибка сценария? - PullRequest
0 голосов
/ 23 января 2020

Вопрос : Что вызывает ошибку в этом сценарии при замене «asMultipleChoiceItem ()» на «asCheckboxItem»? И есть ли очевидный способ исправить это?

Короткая версия : я пытаюсь реализовать вариант решения с флажком ( найден здесь ), заменив " item.asMultipleChoiceItem () "with" item.asCheckboxItem () "; Однако при отладке возникает ошибка «Недопустимое преобразование для типа элемента: MULTIPLE_CHOICE». ( отладочное изображение здесь ). У меня проблемы с устранением неполадок, чтобы определить / понять и, следовательно, выяснить, как исправить ошибку.

Мой код:

function DeptUpdate() {
  // User settings
  var OPTIONS_SPREADSHEET_ID = "1q21HxRkwXxVtiw7D5fuO-w0JCQtZRd-A35gRtmJUwKk";
  var OPTIONS_SHEET_NAME = "Present";
  var OPTIONS_RANGE = "A:A"; // We have the options, listed in column A
  var itemNumber = 1;         // which question on form does this apply to
  //
    var options2DArr = SpreadsheetApp.openById(OPTIONS_SPREADSHEET_ID).getSheetByName(OPTIONS_SHEET_NAME).getRange(OPTIONS_RANGE).getValues();
  var options = options2DArr.reduce(function(a, e) {
    if (e[0] != "") {
      return a.concat(e[0]);
    }
    return a;
  }, []);
  var form = FormApp.openById("1JHZoCdJrsRIltMwKqWGZizRQuy-2Ak2-XET83s04goc");
   var item = form.getItems()[itemNumber - 1];
  item.asCheckboxItem()
      .setTitle("SELECT NAME")
      .setChoiceValues(options)
      .showOtherOption(true);
}

Длинная версия :

Цель: Скрипт Google в листах Google, по триггеру, обновляет параметры контрольного списка целевой формы, чтобы отразить элементы, перечисленные в определенном диапазоне (исключая пробелы).

Цель / контекст: Это одна часть серии форм и электронных таблиц, которые позволяют мне отслеживать прибытие, пропуск в зал / въезд и отъезд из учебного зала, в котором могут посещать любые 10-20 студентов из пула из 120 возможных. Электронная таблица связана с формами, чтобы обеспечить «отображение головы», в котором присутствуют учащиеся и которые вышли из системы в других местах (все это отлично работает). Ограничение вариантов ответов в форме Hall Pass Out и Departure (имена учеников) только для тех, кто регистрируется как «настоящий», значительно сокращает время и пользовательские ошибки в системе ведения журнала. В настоящее время работает с множественным выбором, но студенты часто приезжают / уходят группами. Флажок (множественный ответ) еще больше ускорит процесс отслеживания. В противном случае электронная таблица настроена для обработки нескольких записей ответов; просто нужна форма для соответствующего обновления.

Process / Attempts: Я читал о тех, кто настраивал аналогичные (различного назначения) сценарии, чтобы перейти от выпадающего / множественного выбора к флажку без проблем ( «Я просто изменил это, и это сработало, отлично!» - это степень того, что я прочитал), но как только я переключаюсь на флажок, я получаю прикрепленную ошибку как для поля showOtherOption, так и (если оно удалено) , поле setChoiceValues. Я думаю, что это может быть проблема с элементом флажка, читающего массив иначе, чем с элементом множественного выбора? Тем не менее, я не смог найти ничего в документации или сообщениях Q / A о значительной разнице между параметрами двух функций. На данный момент я просто немного озадачен тем, что может быть причиной проблемы.

Справочная информация : У меня нет формального (или значительного неформального) обучения кодированию, но я настроил и адаптировал множество кодов около десяти лет. Я понимаю основные c процессы / концепции кода и логики программирования c, но мне не хватает существенного / связного словаря.

Я включаю ссылку на фиктивную копию таблицы и форму, на всякий случай.

Электронная таблица

Форма

Заранее благодарим вас за любые идеи!

Бренди

1 Ответ

0 голосов
/ 23 января 2020

Проблема в том, что у вас есть ListItem, но вы пытаетесь преобразовать его в CheckboxItem

. Это невозможно сделать напрямую. Для этой функции в Google Publi c Issue Tracker имеется запрос . Я рекомендую вам дать ему «звездочку» для увеличения видимости.

В то же время, если вы хотите преобразовать тип элемента, вам нужно сделать это вручную, создав новый элемент, передав ему название и выбор из старого и удаление старого элемента:

Образец

function DeptUpdate() {
  // User settings
  var OPTIONS_SPREADSHEET_ID = "1wHE6b5ZuAKJTM4N7t6nlB5SdU9h24ueuxon4jnH_0sE";
  var OPTIONS_SHEET_NAME = "Present";
  var OPTIONS_RANGE = "A:A"; // We have the options, listed in column A
  var itemNumber = 1;         // which question on form does this apply to
  //
    var options2DArr = SpreadsheetApp.openById(OPTIONS_SPREADSHEET_ID).getSheetByName(OPTIONS_SHEET_NAME).getRange(OPTIONS_RANGE).getValues();
  var options = options2DArr.reduce(function(a, e) {
    if (e[0] != "") {
      return a.concat(e[0]);
    }
    return a;
  }, []);
  var form = FormApp.getActiveForm();
  var listItem = form.getItems()[itemNumber - 1];
  listItem
      .asListItem()
      .setTitle("SELECT NAME")
      .setChoiceValues(options)
  var title = listItem.getTitle();
  var choices = listItem.asListItem().getChoices();
  var checkboxItem = form.addCheckboxItem();
  checkboxItem.setTitle(title)
               .setChoices(choices)
               .showOtherOption(true);
  form.deleteItem(listItem);  
}
...