使用 Google Sheet 中的数据创建多项选择题
Create Multiple Choice Question with data from Google Sheet
我正在为我的学习计划的库存创建一个数据库,任何想要使用该项目的人都可以访问该数据库。
几个星期以来,我一直在根据 Google Sheet 数据库中的数据制作多项选择题。
这些代码是我能做的最接近的...不是创建所有的选择,程序只在 1 个选择中放入不同的语句...有人能帮我做出正确的多项选择吗?
function myFunction() {
var ss = SpreadsheetApp.openById('1lSB55vGZeuaJC0OS3zjpuRHEDCXpUTDYC7MPUVr0tMU');
var form = FormApp.openById('1sH-qxqiiyh3Qqq28KuYoaNftnY3RUe4FhGq6qck2eMg');
var ss_mediaandchemical = ss.getSheetByName('Stock - Media & Chemical').getRange('K2:K').getValues();
var form_mediaandchemical_question = form.getItemById('447046025').asMultipleChoiceItem();
for (var i in ss_mediaandchemical){
form_mediaandchemical_question.createChoice(ss_mediaandchemical[i]).isCorrectAnswer;
form_mediaandchemical_question.setChoiceValues(ss_mediaandchemical[i]);
}
}
问题:
setChoiceValues(values) 将数组中所有提供的值设置为项目的选项,删除之前设置的选项。
由于您正在遍历不同的选择,因此您将用源数组中的下一个值替换您设置的每个选择。
此外,getValues()
returns 一个二维数组,而您想提供一个简单的数组。您可以使用 flat() 来解决这个问题。此外,源数据包含几个空单元格,我建议将它们从数组中删除(例如,使用 .filter(String)
.
最后,createChoice doesn't add the choice to the item, and it should be used in combination with setChoices。如果您当时正在使用 setChoiceValues
.
,则使用它没有任何意义
解决方案:
检索包含值的简单数组,删除空值,并直接使用 setChoiceValues
设置选项,无需遍历数组:
var ss_mediaandchemical = ss.getSheetByName('Stock - Media & Chemical').getRange('K2:K').getValues().flat().filter(String);
var form_mediaandchemical_question = form.getItemById('447046025').asMultipleChoiceItem();
form_mediaandchemical_question.setChoiceValues(ss_mediaandchemical);
如果您想通过 createChoice
创建选项(它可以允许更多自定义,例如设置选项 as correct or adding a navigation item),您可以改为这样做:
var ss_mediaandchemical = ss.getSheetByName('Stock - Media & Chemical').getRange('K2:K').getValues().flat().filter(String);
var form_mediaandchemical_question = form.getItemById('447046025').asMultipleChoiceItem();
var choices = ss_mediaandchemical.map(value => form_mediaandchemical_question.createChoice(value));
form_mediaandchemical_question.setChoices(choices);
我正在为我的学习计划的库存创建一个数据库,任何想要使用该项目的人都可以访问该数据库。 几个星期以来,我一直在根据 Google Sheet 数据库中的数据制作多项选择题。
这些代码是我能做的最接近的...不是创建所有的选择,程序只在 1 个选择中放入不同的语句...有人能帮我做出正确的多项选择吗?
function myFunction() {
var ss = SpreadsheetApp.openById('1lSB55vGZeuaJC0OS3zjpuRHEDCXpUTDYC7MPUVr0tMU');
var form = FormApp.openById('1sH-qxqiiyh3Qqq28KuYoaNftnY3RUe4FhGq6qck2eMg');
var ss_mediaandchemical = ss.getSheetByName('Stock - Media & Chemical').getRange('K2:K').getValues();
var form_mediaandchemical_question = form.getItemById('447046025').asMultipleChoiceItem();
for (var i in ss_mediaandchemical){
form_mediaandchemical_question.createChoice(ss_mediaandchemical[i]).isCorrectAnswer;
form_mediaandchemical_question.setChoiceValues(ss_mediaandchemical[i]);
}
}
问题:
setChoiceValues(values) 将数组中所有提供的值设置为项目的选项,删除之前设置的选项。
由于您正在遍历不同的选择,因此您将用源数组中的下一个值替换您设置的每个选择。
此外,getValues()
returns 一个二维数组,而您想提供一个简单的数组。您可以使用 flat() 来解决这个问题。此外,源数据包含几个空单元格,我建议将它们从数组中删除(例如,使用 .filter(String)
.
最后,createChoice doesn't add the choice to the item, and it should be used in combination with setChoices。如果您当时正在使用 setChoiceValues
.
解决方案:
检索包含值的简单数组,删除空值,并直接使用 setChoiceValues
设置选项,无需遍历数组:
var ss_mediaandchemical = ss.getSheetByName('Stock - Media & Chemical').getRange('K2:K').getValues().flat().filter(String);
var form_mediaandchemical_question = form.getItemById('447046025').asMultipleChoiceItem();
form_mediaandchemical_question.setChoiceValues(ss_mediaandchemical);
如果您想通过 createChoice
创建选项(它可以允许更多自定义,例如设置选项 as correct or adding a navigation item),您可以改为这样做:
var ss_mediaandchemical = ss.getSheetByName('Stock - Media & Chemical').getRange('K2:K').getValues().flat().filter(String);
var form_mediaandchemical_question = form.getItemById('447046025').asMultipleChoiceItem();
var choices = ss_mediaandchemical.map(value => form_mediaandchemical_question.createChoice(value));
form_mediaandchemical_question.setChoices(choices);