我可以使用 Google Apps 脚本使 Google 表单显示来自 Google Sheet 的随机文本吗?

Can I use Google Apps Script to make a Google Form display randomized text from a Google Sheet?

假设我在 Google Sheet 中有 1000 种动物的列表(例如,狗、猫、牛、...、长颈鹿)。我希望 Google 表格能够在每次受访者打开表格时随机挑选其中一只动物。

例如,您见过 __________ 吗?

在这里,每个受访者的空白都会不同(除非他们足够幸运随机获得匹配的动物)。

我目前有代码可以从 Google Sheet 中随机 select 一只动物,但我不知道如何随机 select 一只动物每个受访者,因为 onOpen() 函数不能为每个受访者触发,而只能在所有者打开表单时触发。

function onOpen(e){
  var animals = worksheet.getRange(2, 1, worksheet.getLastRow()-1, 1)
              .getValues()
              .map(function(o){ return o[0]})
              .filter(function(o){return o !== ""});
  //Logger.log(animals)

  // get random animal
  var animal = animals[Math.floor(Math.random()*animals.length)];

  Logger.log(animal);
  var id = getBlockIdFromTitle()
  Logger.log(id) 

  if (id !== -1){
    updateLink(id, animal)
  }
}

任何有关如何更改我的代码或采用完全不同的方法来实现相同结果的建议都将不胜感激。谢谢!

代替onOpen触发器,使用installableonFormSubmit触发器

这将允许您在受访者提交表单后更新您的表单问题。

样本:

function onFormSubmit(e){
  var animals = worksheet.getRange(2, 1, worksheet.getLastRow()-1, 1)
              .getValues()
              .map(function(o){ return o[0]})
              .filter(function(o){return o !== ""});
  //Logger.log(animals)

  // get random animal
  var animal = animals[Math.floor(Math.random()*animals.length)];
  FormApp.openById("XXX").getItems()[0].asTextItem().setTitle("Have you ever seen a " + animal + "?");
  }
}

心灵:

  • 由于问题只会在表单提交时更新,因此在前一个受访者完成提交之前打开表单的受访者不会看到不同版本的表单。

  • 但是,目前没有其他选项可以为每个受访者动态更改问题内容。

  • 如果对您有帮助 - 可以选择 shuffle 针对不同受访者的问题顺序和答案选项。