将 "Create Multiple Choice Form Question from spreadsheet" 脚本转换为 "Create Checkbox etc." 脚本 - 错误?

Converting "Create Multiple Choice Form Question from spreadsheet" script to "Create Checkbox etc." script - error?

问题:将"asMultipleChoiceItem()"替换为"asCheckboxItem"时,是什么导致此脚本中的错误?有没有明显的方法来纠正它?

简短版本:我正在尝试实现解决方案的复选框版本 (found here), by replacing "item.asMultipleChoiceItem()" with "item.asCheckboxItem()"; however, I'm encountering an error on debugging "Invalid conversion for item type: MULTIPLE_CHOICE." (debug image here)。我在对 identify/understand 进行故障排除时遇到问题,因此弄清楚如何更正错误。

我的代码:

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 工作表中的脚本,触发时,更新目标表单的清单选项以反映定义范围内列出的项目(不包括空白)。

Purpose/Context: 这是一系列表格和电子表格的一部分,可以让我跟踪到达、大厅通行证 out/in 和离开一个自习室,任何一天都有 120 名学生中的任何 10-20 名学生可以参加。电子表格被 link 编辑为表格,以提供 "head's up display" 哪些学生在场,哪些学生已签出到其他位置(这一切都很好)。将 Hall Pass Out 和 Departure 表格答案选项(学生姓名)限制为仅以 "present" 签到的选项可以大大减少日志系统中的时间和用户错误。目前使用多项选择,但学生经常 arrive/leave 分组。复选框(多选)将进一步加快跟踪过程。电子表格以其他方式设置为处理多个响应条目;只需要适当更新表格即可。

Process/Attempts: 我读过其他人调整了类似(不同目的)脚本以毫无问题地从 dropdown/multiple 选择更改为复选框("I just change this and it worked, great!" 是我读过的内容),但是一旦我更改为复选框,我就会收到 showOtherOption 字段和(如果已删除)setChoiceValues 字段的附加错误。我认为这可能是复选框项目读取数组的方式与多项选择项目不同的问题?但是,我无法在文档或 Q/A 帖子中找到关于这两个函数参数之间显着差异的任何内容。在这一点上,我对可能导致此问题的原因感到有点困惑。

背景:我没有接受过正式(或重要的非正式)编码培训,但在大约十年的时间里对各种代码进行了调整和改编。我了解基本的 processes/concepts 代码和编程逻辑,但缺乏 substantial/cohesive 词汇。

我将 link 添加到电子表格和表格的虚拟副本中,以防有帮助。

Spreadsheet

Form

提前感谢您的任何见解!

白兰地

问题是您有 ListItem 但尝试将其转换为 CheckboxItem

这不是直接可能的。此功能有一个 feature request on Google's Public Issue Tracker。我建议您给它一个 "star" 以提高知名度。

同时,如果你想转换一个项目类型,你需要通过创建一个新项目手动完成,将旧项目的标题和选择传递给它并删除旧项目:

样本

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