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

Is it possible to place form responses with sections to different tabs?

想知道是否有人知道是否可以将表单回复定向到不同的选项卡但在相同的范围内sheet?

我有不同部分的表格,主要部分、Drop-Off/PickUp 和会议部分。在主窗体中,有一个下拉菜单,其中包含 DO/PU 或会议选项。如果选择 DO/PU,他们将被定向到表格的该部分。

两种形式非常相似,只有一点点不同。然而在主回复sheet中,即使是相同的信息也被分成了不同的栏目。例如,DO/PU 的名称在 B 列中,而会议名称在 C 列中。 因此,我想知道是否可以将每个部分的响应定向到其自己的选项卡。

我必须使用 App 脚本吗?

我只尝试过使用 IMPORTRANGE 和 QUERY 函数,但信息没有按照我想要的方式排序(某些列在导入时中间有空列)。

不幸的是,如果不使用 Apps 脚本,就无法按照您描述的方式将表单回复分离和组织到多个 sheet 中,因为 Google 表单总是会提交所有回复每次提交时单个 sheet。

使用 Apps 脚本这可以非常简单地完成,如果您知道每个页面上需要放置多少回复,您可以编写一个 onFormSubmit() 函数绑定到打开 Sheet 直接使用 Sheet 的 ID,并将数据从默认的 sheet 移动到您想要的 sheet。

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() 每次提交表单时都指向正确的响应范围。如果您想在第一行中看到问题,您需要确保 sheet 中的每个问题都填充在 row 1 中,因为此脚本只会获得最新的回复。

完成此操作后,请确保您在 Resources -> Advanced google Services 下启用了 Sheets API 高级 Google 服务,并在您的 G Suite Developer Hub Triggers page 以便 onFormSubmit() 函数在事件类型 'On form submit'.

上运行