如何根据 Google Sheet 中的数据在 Google 表单中填写多项选择题

How can I populate multiple choice questions in a Google Form from data within a Google Sheet

简而言之:我是 Google App Script 的新手,作为一个更大项目的一部分,我希望能够在 Google 表单中填充多项选择项的选项信息存储在 Google Sheet 中。 sheet 正在存储我工作的几位员工的姓名和联系信息。我希望表格列出 sheet 中个人的姓名,并根据该选择访问其他联系信息,以便稍后进行其他工作。

sheet 的示例条目可能是(尽管 sheet 应该能够包含任意数量的条目(显然从第 2 行开始计数,忽略 header )):

LNAME    FNAME    ADDRESS             PHONE
Smith    John    123 Sesame Street    (123) 456-7890
Piper    Peter   12 Shore Lane        (098) 765-4321

至于表格,我用初始项填充了它,第一个是多项选择项,我希望 Sheet 中的每个名称都有不同的条目(在这种情况下我会想要列出 "John Smith" 和 "Peter Piper").

的 2 个条目

将加载这些名称的代码放在表单的 onload() 函数中似乎是合乎逻辑的,因为每次使用时表单都会更新。至于代码,我最初尝试了以下方法:

function onOpen() {
  // Get a handle for the form itself.
  var form = FormApp.getActiveForm();

  // Who is completing the form?
  var swSheet = SpreadsheetApp.openByUrl("SHEET URL"));
  var sheet = swSheet.getSheetByName("Staff");
  var staff= form.getItems()[0];
  var mcitem = staff.asMultipleChoiceItem();
  mcitem.setChoices([
    mcitem.createChoice(
      mcitem.createChoice(sheet.getRange(2, 2) + " " + sheet.getRange(2, 3)),
    mcitem.createChoice(sheet.getRange(3, 2) + " " + sheet.getRange(3, 3)),
    mcitem.createChoice(sheet.getRange(4, 2) + " " + sheet.getRange(4, 3))
    ]);
}

问题是我在调用 openByUrl() 时出错(在线搜索显示出于安全原因已弃用)。有一个 IMPORTRANGE() 函数可以为我提取正确的信息,但这似乎只能从 Sheet 内访问,而不是 Google 应用程序脚本。我也在网上四处寻找,似乎找不到任何其他我可以考虑的想法。

注意:我知道这是对前 3 个条目的硬编码,而不是无限数量,但这是最终目标。目前我只是想弄清楚如何将信息从 Sheet 提取到 Google 应用程序脚本中。

您可以将脚本部署为 Web 应用程序并向表单收件人发送 Web App URL 而不是表单 link。每次用户打开 Web 应用程序时,表单都会自动更新 URL。

// will be automatically run every time the user opens the URL of the web deployment
function doGet(){
var form = FormApp.openById("FORM ID");
var swSheet = SpreadsheetApp.openByUrl("SHEET URL"));
var sheet = swSheet.getSheetByName("Staff");
var staff= form.getItems()[0];
var mcitem = staff.asMultipleChoiceItem();
mcitem.setChoices([
    mcitem.createChoice(sheet.getRange(2, 2) + " " + sheet.getRange(2, 3)),
    mcitem.createChoice(sheet.getRange(3, 2) + " " + sheet.getRange(3, 3)),
    mcitem.createChoice(sheet.getRange(4, 2) + " " + sheet.getRange(4, 3))
    ]);
// get the link to the form 
var URL=form.getPublishedUrl();
// redirect to the prefilled form URL dynamically created above 
return HtmlService.createHtmlOutput("<script>window.top.location.href=\"" + URL + "\"</script>");
}

这是我对此的建议。这个对我有用;从 Google sheet 的行和列范围中获取值,并将它们放在 Google 表格多项选择网格问题中:

var form = FormApp.openById('MyForm');
var PtjGridList = form.getItemById(MyFormItemId).asGridItem();
var ss = SpreadsheetApp.openById("MyGoogleSheet");
var PtjNombre = ss.getSheetByName("MyDataSheet");
var RowValues = PtjNombre.getRange(2, 1, PtjNombre.getLastRow() - 1).getValues();
var ValuesRow = [];
for(var i = 0; i < RowValues.length; i++)
if(RowValues[i][0] != "")
ValuesRow[i] = RowValues[i][0];
PtjGridList.setRows(ValuesRow)
var ColumnValues = PtjNombre.getRange(2, 2, PtjNombre.getLastRow() - 1).getValues();
var ValuesColumn = [];
for(var i = 0; i < ColumnValues.length; i++)
if(ColumnValues[i][0] != "")
ValuesColumn[i] = ColumnValues[i][0];
PtjGridList.setColumns(ValuesColumn)