是否可以将带有部分的表单响应放置到不同的选项卡?

时间:2019-07-08 03:10:02

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

想知道是否有人知道是否可以将表单响应定向到同一电子表格中的不同选项卡?

我的表单有不同的部分,分别是“主要”,“下车/领取”和“会议”。在主窗体中,有一个下拉菜单,其中包含用于DO / PU或会议的选项。如果选择了DO / PU,则会将其定向到表单的该部分。

两种形式都非常相似,只是略有不同。但是,在主响应表中,即使是相同的信息也会分为不同的列。例如,DO / PU的名称在B列中,而会议的名称在C列中。 因此,我想知道是否有可能将每个部分的响应定向到其自己的选项卡。

我必须使用App Script吗?

我只尝试使用IMPORTRANGE和QUERY函数,但信息未按照我想要的方式进行排序(某些列的导入是在中间插入了空列)。

1 个答案:

答案 0 :(得分:0)

如果不使用Apps Script,就无法采用您不幸描述的方式将表单响应分离和组织成多个表单,因为Google表单将始终在每个汇总位上将所有响应提交到同一表单。

使用Apps脚本可以很简单地完成此操作,如果您知道每个页面上需要放置多少响应,则可以编写一个绑定到表单的onFormSubmit()函数,该函数直接使用工作表的标识ID,并将数据从默认工作表移动到所需的工作表中。

function onFormSubmit(){

  // Open the spreadsheet and each of the sheets to copy from and to
  var spreadsheet = SpreadsheetApp.openById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
  var tempSheet = spreadsheet.getSheetByName("DefaultSheetTheFormSumbitsTo")
  var page1 = spreadsheet.getSheetByName("Responses 1");
  var page2 = spreadsheet.getSheetByName("Responses 2");
  var page3 = spreadsheet.getSheetByName("Responses 3");

  // Get the first free row in each of the segregated sheets to copy from and to
  var page1Range = page1.getRange((page1.getLastRow() + 1), 1, 1, 4);
  var page2Range = page2.getRange((page2.getLastRow() + 1), 1, 1, 4);
  var page3Range = page3.getRange((page3.getLastRow() + 1), 1, 1, 4);

  // Get the values of the data from the default sheet that you want 
  // to copy to each of the sheets
  var page1Data = tempSheet.getRange(tempSheet.getLastRow(), 1, 1, 4);
  var page2Data = tempSheet.getRange(tempSheet.getLastRow(), 5, 1, 4);
  var page3Data = tempSheet.getRange(tempSheet.getLastRow(), 10, 1, 4);

  // Copy the data into the right sheet
  page1Range.setValues(page1Data.getValues());
  page2Range.setValues(page2Data.getValues());
  page3Range.setValues(page3Data.getValues());

  // Uncomment this if you want to keep the default sheet clean, though
  // this code will run either way
  // tempSheet.clear();  
}

您需要确保每次提交表单时,.getRanges()都指向正确的响应范围。如果您想在第一行中看到问题,则需要确保每个单独的工作表都填充在row 1中,因为此脚本只会得到最新的答复。

完成此操作后,请确保已在Resources -> Advanced google Services下启用了Sheets API Advanced Google服务,并在G Suite Developer Hub Triggers page上设置了可安装的触发器,以使onFormSubmit()功能在事件类型“提交表单”上运行。