基于表单响应的Google电子表格格式 #1安装onFormSubmit触发器:#2将提交的数据追加到工作表的功能:注意:参考:

问题描述

我正试图使Google表单根据1种表单输入的数据填充包含多行的电子表格:

输入后,我需要让Forms在工作表(或格式化工作表)中输入数据,如下所示: -输入的每个零件(1、2或3)应在同一行中具有相同的客户名称

  • 表格编辑器然后可以在额外的行中输入数据,例如“交货日期”和“项目价格”

短: 提交了1个表格,3个问题,3行

main form

parts entry

form responses

formatted result

p.s。单元格着色仅用于指出行之间的公共数据

解决方法

一种选择是执行以下操作:

#1。安装onFormSubmit触发器:

安装一个附加到电子表格的onFormSubmit触发器,以便在每次提交附加到电子表格的表单时都运行一个函数(假定您的表单已附加到电子表格)。

可以在these stepsprogrammatically之后手动安装触发器。要以编程方式安装触发器,请通过单击Tools > Script editor打开绑定到电子表格的脚本,然后复制一次执行此功能:

function createTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("submitData")
    .forSpreadsheet(ss)
    .onFormSubmit()
    .create();
}

每次提交表单时,这将触发一个名为submitData的函数。接下来,将是写函数,该函数应以所需的格式附加提交的数据。

#2。将提交的数据追加到工作表的功能:

为了将通过表单提交的数据追加到名为Formated responses的表单上,您需要使用相应的event object,其中包含提交的数据。您可以使用它来检查提交了多少部分以及其相应字段的值。然后,可以使用方法appendRow将此数据附加到工作表中。

可能是这样的:

function submitData(e) {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Formated responses");
  var res = e.namedValues;
  var numberOfParts = res["Number of parts"][0];
  var mainFields = [res["Timestamp"][0],res["Client name"][0],numberOfParts];
  switch (numberOfParts) {
    case '1':
      var fieldsOne = [res["Part identification number"][0],res["Part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsOne));      
      break;
    case '2':
      var fieldsTwo = [res["#1 part identification number"][0],res["#1 part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsTwo));
      fieldsTwo = [res["#2nd part identification number"][0],res["#2nd part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsTwo));
      break;
    case '3':
      var fieldsThree = [res["#1st part identification number"][0],res["#1st part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsThree));
      fieldsThree = [res["#2nd part identification number"][1],res["#2nd part name"][1]];
      sheet.appendRow(mainFields.concat(fieldsThree));
      fieldsThree = [res["#3rd part identification number"][0],res["#3rd part name"][0]];
      sheet.appendRow(mainFields.concat(fieldsThree));
      break;
  }
}

注意:

  • 可以简化函数submitData(可以删除switch,而改用for循环),但是Form字段的名称与每个字段不一致其他,阻碍了这一选择。因此,该功能具有大量重复。我建议您修复字段名称并稍微重写一下函数。

参考: