【问题标题】:Is there a way to submit google forms responses to different spreadshseets, based on user dropdown choice?有没有办法根据用户下拉选择提交对不同电子表格的谷歌表单响应?
【发布时间】:2019-08-11 15:00:40
【问题描述】:

我有很多用户通过 google 提交工作负载数据。其中包括一个字段,用于指定他们报告的网站。

我现在有 1000 条回复,我从主回复提交表中query > filter 到每个网站的单独电子表格中。随着响应的增加,查询的数据加载时间越来越长。

[FORM] --> [MASTER SHEET WITH RESPONSES]
                        |
                        |
                      / | \
           QUERY FILTER INTO SEPARATE SHEETS

相反,我想强制表单根据在表单中选择的站点将回复直接提交到相应的站点电子表格中。有没有办法做到这一点?

[FORM: USER SITE SELECTION] --> SCRIPT SENDS DATA DIRECTLY TO SHEET FOR THAT SITE

【问题讨论】:

  • 当然。您可以禁用工作表链接并使用onFormSubmit 触发器提交到正确的工作表。
  • 要进一步阐述@TheMaster 的答案,您需要将onFormSubmit 触发器直接添加到表单(不是每个电子表格)并自己处理提交。这种方法存在一些已知问题,其中某些表单响应不会触发onFormSubmit 处理程序。因此,您可能希望设置冗余检查,其中您有一个基于时间的触发器来检查表单响应以验证它们是否由onFormSubmit 触发器处理并相应地处理这种情况。
  • @sinaraheneba 这是一个相当广泛的推荐。您是否考虑过文档的特定部分?
  • 为什么不直接使用具有相同内容的四种不同表单,但使用不同的电子表格作为目标?您可以创建一个简单的欢迎网页,用户可以在其中选择他的网站,并将相应地重定向到具有相应目的地的表单。

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


【解决方案1】:

您问是否有办法强制表单根据表单选择将回复直接提交到电子表格中?

在 cmets TheMasterDimuDesigns 中提到 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);
}

表单截图


电子表格截图示例


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多