Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 基于表单响应的Google电子表格格式化_Google Sheets_Google Forms - Fatal编程技术网

Google sheets 基于表单响应的Google电子表格格式化

Google sheets 基于表单响应的Google电子表格格式化,google-sheets,google-forms,Google Sheets,Google Forms,我正试图让一个Google表单根据1个表单输入的数据,用多行填充电子表格,如下所示: function submitData(e) { var sheet = SpreadsheetApp.getActive().getSheetByName("Formated responses"); var res = e.namedValues; var numberOfParts = res["Number of parts"][0]; var m

我正试图让一个Google表单根据1个表单输入的数据,用多行填充电子表格,如下所示:

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;
  }
}
  • 表单简单,客户信息最少
  • 根据客户所需的选定零件数量(此时为1、2或3),表格转到第1、2或3节,其中按零件名称和识别号输入1、2或3
输入后,我需要表单在工作表(或格式化工作表)中输入数据,如下所示: -输入的每个零件(1、2或3)应位于单独的行中,并具有相同的通用客户名称

  • 然后,工作表编辑器可以在额外的行中输入数据,如“交货日期”和“项目价格”
简称: 提交1份表格,3个问题,3行


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

一个选项是执行以下操作:

#1.安装onFormSubmit触发器: 安装附加到电子表格的触发器,以便每次提交附加到电子表格的表单时都会运行一个函数(这假定表单已附加到电子表格)

触发器可以手动安装,也可以按照以下步骤安装,也可以按以下步骤安装。要以编程方式安装触发器,请通过单击
Tools>scripteditor
打开绑定到电子表格的脚本,然后复制一个脚本并执行此函数一次:

function createTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("submitData")
    .forSpreadsheet(ss)
    .onFormSubmit()
    .create();
}
这将在每次提交表单时触发名为
submitData
的函数。接下来是编写函数,该函数应该以您想要的格式附加提交的数据

#2.将提交的数据追加到工作表的功能: 为了将通过表单提交的数据附加到名为
格式化响应
的工作表中,您需要使用相应的表单,其中包含提交的数据。您可以使用此选项检查提交的零件数量及其相应字段的值。然后,可以使用该方法将这些数据附加到工作表中

可能是这样的:

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
    (可能会删除
    开关
    ,并使用
    for
    循环),但表单字段的名称彼此不一致,妨碍了此选项。因此,该函数有相当多的重复。我建议您修复字段名并稍微重写函数
参考:

默认情况下,每个表单提交都是一个新行。您可以在新选项卡中重新构造表单数据并使用它。到目前为止您做了哪些研究?你试过什么吗?我在考虑三个选项:(1)安装一个将提交的数据直接以所需格式添加到电子表格中的程序;(2)安装一个
onFormSubmit
,从
表单响应中获取数据,并以所需格式将其复制到所需的工作表中;(3)使用图纸公式将数据复制到所需格式。你认为什么最适合你的情况?您是否可以使用应用程序脚本?此外,您提供的表单不是公共的。你能提供一份公开的、没有敏感信息的副本吗?完成。我已经公开了这个表单(很抱歉)。。。我曾尝试使用stackexchange[链接]上发布的一个类似问题,但没有成功。我没有使用“应用程序脚本”,我认为我必须实现更“自动化”(在表单提交上)的功能。好吧,应用程序脚本是实现“更自动化”的工具,就像我前面提到的
onFormSubmit
。在这种情况下,我前面提到的任何选项都适合您吗?