如何从Google表格中的数据填充Google表单中的多项选择问题

时间:2019-08-08 03:48:45

标签: google-apps-script google-sheets google-form

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

工作表的示例条目可能是(尽管工作表应能够包含任意数量的条目(显然,第2行开始计数,以忽略标题)):

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

对于表单,我在其中填充了初始项,其中第一个是多项选择项,在该表中,我希望工作表中的每个名称都有一个不同的条目(在这种情况下,我希望有2个条目列出“约翰·史密斯”和“彼得·派珀”)。

将代码加载这些名称到Form的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()函数可以为我提取正确的信息,但这似乎只能从工作表中的WITH中访问,而不能在Google App脚本中访问。我也在网上环顾四周,似乎找不到我可以考虑的其他想法。

注意:我意识到这是对前3个条目进行了硬编码,而不是无限数量,但这是最终目标。目前,我只是想弄清楚如何将表格中的信息提取到Google App脚本中。

2 个答案:

答案 0 :(得分:0)

您可以将脚本部署为Web应用程序,并向Web App URL(而不是表单链接)发送给表单收件人。每次用户打开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>");
}

答案 1 :(得分:0)

这是我的建议。这个对我有用;从Google表格获取行和列范围内的值,并将其置于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)