google-apps-script - 将“从电子表格创建多项选择表单问题”脚本转换为“创建复选框等” 脚本 - 错误?
问题描述
问题:将“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 帖子中找到关于两个函数参数之间显着差异的任何内容。在这一点上,我对可能导致问题的原因有点困惑。
背景:我没有接受过正式(或重要的非正式)编码培训,但已经调整和调整了大约十年的各种代码。我了解代码和编程逻辑的基本流程/概念,但缺乏实质性/连贯的词汇。
我包括一个指向电子表格和表格的虚拟副本的链接,以防万一。
提前感谢您的任何见解!
白兰地
解决方案
问题是您有 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);
}
推荐阅读
- laravel - Eloquent 关系数据透视表与 3 模型
- ios - 重新启动应用程序 swift 4 时,UserDefaults 有时不保留保存的值
- r - 如何在表格中构造 Web 数据
- python - Linux 上 VSCode 中 Python 的 VSCode-Python 大纲视图不起作用
- c# - 列表
> 使用 linq 操作数据 - c - 尝试使用结构变量时遇到问题
- react-native - 在 React Native 中具有相同标识符的 JSON 数组
- shell - 如何在shell中使用@将复杂的表达式分配给变量
- php - 将 JSON 对象从 Xamarin 获取到 PHP?
- javascript - 使用 fs nodejs 搜索文件内的内容