使用 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);