【问题标题】:Google spreadsheet formating based on form responses基于表单响应的 Google 电子表格格式
【发布时间】:2020-08-28 09:17:45
【问题描述】:

我正在尝试根据 1 个表单输入的数据使 Google 表单填充具有多行的电子表格,如下所示:

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

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

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

附言单元格着色仅用于指出行之间的公共数据

【问题讨论】:

  • 默认情况下,每个表单提交都是一个新行。您可以在新选项卡中重新构建表单数据并使用它。
  • 到目前为止您做了哪些研究?你尝试过什么吗?我正在考虑三个选项:(1)安装一个onFormSubmit,它将以所需格式直接将提交的数据添加到电子表格中,(2)安装一个onFormSubmit,它将从Form Responses获取数据并复制它以所需的格式复制到所需的工作表,以及 (3) 使用工作表公式将数据复制到所需的格式。你认为什么最适合你的情况?您愿意使用 Apps 脚本吗?
  • 另外,您提供的表格不是公开的。您能否提供一份可公开访问且不含敏感信息的副本?
  • 完成。我已经公开了表单(对此感到抱歉)...我尝试使用在 stackexchange [link]webapps.stackexchange.com/questions/107100/… 上发布的类似问题,但没有完全做到。我没有使用“应用程序脚本”,我认为我必须实现更“自动化”的东西(在提交表单时)
  • 嗯,Apps Script 是一个实现“更自动化”的工具,就像我之前提到的onFormSubmit。在这种情况下,我之前提到的任何选项都适合您吗?

标签: google-sheets google-forms


【解决方案1】:

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

#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的工作表上附加通过Form提交的数据,您需要使用对应的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 循环),但表单字段的名称彼此不一致,阻碍了此选项。因此,该函数具有相当多的重复性。我建议您修复字段名称并稍微重写函数。

参考:

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2020-02-17
    • 2013-10-06
    相关资源
    最近更新 更多