简而言之:我是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脚本中。
答案 0 :(得分:0)
// 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)