我有很多用户通过google提交工作负载数据。其中包括一个字段,用于指定要报告的网站。
现在,我从主要响应提交表中query > filter
回复了1000多个响应,并放入每个站点的单独电子表格中。随着响应的增加,查询的数据加载时间越来越长。
[FORM] --> [MASTER SHEET WITH RESPONSES]
|
|
/ | \
QUERY FILTER INTO SEPARATE SHEETS
相反,我想强迫表单根据表单中选择的站点将响应直接提交到适当的站点电子表格中。有没有办法做到这一点?
[FORM: USER SITE SELECTION] --> SCRIPT SENDS DATA DIRECTLY TO SHEET FOR THAT SITE
答案 0 :(得分:0)
您问是否有一种方法可以强制表单根据表单选择将回复直接提交到电子表格中?
在注释TheMaster
和DimuDesigns
中,i)使用绑定到表单而不是电子表格的脚本,以及ii)使用onFormSubmit
作为可安装触发器。以下答案是这些原则的示例。
在测试中,我发现必须将表单命名为onFormSubmit(e)
。如果代码被命名为自定义函数,那么我发现它给出了一个错误“您无权调用SpreadsheetApp.openByUrl。”
可能我可能/应该/应该使用switch
而不是if...else
。但是,实现此结果的方法有很多,该代码应仅作为一个示例。
function onFormSubmit(e) {
//so5745108802
var form = FormApp.getActiveForm();
//Logger.log(JSON.stringify(e));
var resp = e.response.getItemResponses();
//Logger.log(resp);
//Logger.log("DEBUG: resp = "+resp+", and length = "+resp.length);
var dateStamp = Utilities.formatDate(new Date(), "GMT+10:00", "dd-MM-yyyy");
var output = [];
var temp=[];
temp.push(dateStamp);
for (var j = 0; j < resp.length; j++) {
var itemResponse = resp[j];
// Logger.log('DEBUG: Response to the question "%s" was "%s"',itemResponse.getItem().getTitle(),itemResponse.getResponse());
// Logger.log("DEBUG: the response = "+ itemResponse.getResponse())
temp.push(itemResponse.getResponse());
}
output.push(temp);
// Logger.log(output);
var target = resp[2].getResponse();
// Logger.log("DEBUG: the target sheet is "+target)
// Note: be sure to edit the urls for your own spreadsheets
if (target === "A"){
// target = A
var url = "https://docs.google.com/spreadsheets/d/url1/edit" // Spreadsheet=so_57451088_A
}
else if (target === "B"){
// target = B
var url = "https://docs.google.com/spreadsheets/d/url2/edit" // Spreadsheet=so_57451088_B
}
else {
// target = C
var url = "https://docs.google.com/spreadsheets/d/url3/edit" // Spreadsheet=so_57451088_C
}
var ss = SpreadsheetApp.openByUrl(url);
Logger.log(ss.getName());
var sheetname = "Sheet1";
var sheet = ss.getSheetByName(sheetname);
var sheetLR = sheet.getLastRow();
var targetRange = sheet.getRange(sheetLR+1,1, 1, resp.length+1);
// Logger.log("DEBUG: the target range = "+targetRange.getA1Notation());
targetRange.setValues(output);
}