Google 基于表单回复的电子表格格式

Google spreadsheet formating based on form responses

我正在尝试制作一个 Google 表格,根据 1 个表格输入的数据,使用多行填充一个传播sheet,如下所示:

输入后,我需要表格在 Sheet(或格式化 sheet)中输入数据,如下所示: - 输入的每个部分(1、2 或 3)都应位于单独的行中,并具有相同的共同客户名称

简短: 已提交 1 个表单,表单中有 3 个问题,3 行

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

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

#1。安装 onFormSubmit 触发器:

安装附加到您的传播sheet的onFormSubmit触发器,以便每次提交附加到传播sheet的表单时运行一个函数(这假设您的表单是附加到您的点差sheet)。

可以按照 these steps, or programmatically 手动安装触发器。要以编程方式安装触发器,请通过单击 Tools > Script editor 打开绑定到您的传播 sheet 的脚本,然后复制并执行此函数一次:

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

这将在每次提交表单时触发一个名为 submitData 的函数。那么,接下来就是编写函数,该函数应该以您想要的格式附加提交的数据。

#2。将提交的数据附加到 sheet:

的函数

为了将通过表单提交的数据附加到名为 Formated responses 的 sheet 上,您需要使用相应的 event object, which contains the submitted data. You can use this to check how many parts are submitted and the values for its corresponding fields. Then, the method appendRow 才能将此数据附加到 sheet.

可能是这样的:

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循环代替),但是表单字段的名称不一致彼此阻碍了这个选择。因此,该函数有相当多的重复。我建议您修复字段名称并稍微重写函数。

参考: