如何根据 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)
简而言之:我是 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)