首页 > 解决方案 > 将“从电子表格创建多项选择表单问题”脚本转换为“创建复选框等” 脚本 - 错误?

问题描述

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

简短版本:我正在尝试通过将“item.asMultipleChoiceItem()”替换为“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 脚本在触发时更新目标表单的清单选项,以反映定义范围内列出的项目(不包括空白)。

目的/背景:这是一系列表格和电子表格的一部分,这些表格和电子表格允许我跟踪到达、大厅出入和离开自习的情况,其中 120 名可能的 10-20 名学生可以在任何一天参加。电子表格链接到表格,以提供学生在场的“抬头显示”,以及哪些学生已登出到其他位置(这一切都很好)。将 Hall Pass Out 和 Departure 表格的答案选择(学生姓名)限制为仅以“出席”形式签到的人,大大减少了记录系统中的时间和用户错误。目前有多项选择,但学生经常成群结队地到达/离开。复选框(多重响应)将进一步加快跟踪过程。电子表格以其他方式设置为处理多个响应条目;

过程/尝试:我读过其他人调整了类似(不同目的)脚本以从下拉/多项选择更改为复选框而没有问题(“我只是更改了它并且它起作用了,太棒了!”是我所做的程度读),但是一旦我更改为复选框,我就会收到 showOtherOption 字段和(如果已删除)setChoiceValues 字段的附加错误。我认为复选框项目读取数组的方式与多项选择项不同,这可能是一个问题?但是,我无法在文档或 Q/A 帖子中找到关于两个函数参数之间显着差异的任何内容。在这一点上,我对可能导致问题的原因有点困惑。

背景:我没有接受过正式(或重要的非正式)编码培训,但已经调整和调整了大约十年的各种代码。我了解代码和编程逻辑的基本流程/概念,但缺乏实质性/连贯的词汇。

我包括一个指向电子表格和表格的虚拟副本的链接,以防万一。

电子表格

形式

提前感谢您的任何见解!

白兰地

标签: google-apps-scriptcheckboxgoogle-sheetsgoogle-formscheckboxlist

解决方案


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

这是直接不可能的。Google 的Public 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);  
}

推荐阅读