Можно ли разместить формы ответов с разделами на разных вкладках? - PullRequest
1 голос
/ 08 июля 2019

интересовался, знает ли кто-нибудь, можно ли направлять ответы в форме на разные вкладки, но в пределах одной таблицы?

У меня есть форма с различными разделами: Main, Drop-Off / PickUp и Meeting. В основных формах есть раскрывающийся список, в котором можно выбрать DO / PU или Meeting. Если выбран вариант DO / PU, они будут направлены в этот раздел формы.

Обе формы очень похожи и имеют небольшую разницу. Однако в основном листе ответов даже одна и та же информация разделена на разные столбцы. Например, Имя для DO / PU находится в столбце B, а Имя для Meeting в столбце C. Поэтому мне было интересно, можно ли направлять ответы каждого раздела на свои вкладки.

Придется ли мне использовать скрипт приложения?

Я только пытался использовать IMPORTRANGE и функцию QUERY, но информация не сортируется так, как я хочу (некоторые столбцы импортируются с пустым столбцом между ними). ​​

1 Ответ

0 голосов
/ 08 июля 2019

Без использования скрипта приложений невозможно разделить и упорядочить ответы в форме на несколько листов, как вы, к сожалению, описываете, так как формы Google всегда будут отправлять все ответы на один и тот же лист в каждом наборе.

Используя Apps Script, это можно сделать довольно просто, хотя, если вы знаете, сколько ответов нужно разместить на каждой странице, вы можете написать функцию onFormSubmit(), привязанную к форме, которая открывает лист непосредственно, используя идентификатор листа и перемещает данные из листа по умолчанию на листы, которые вы хотите.

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, так как этот скрипт получает только самый последний ответ.

После того, как это будет сделано, убедитесь, что у вас включена расширенная служба Google Sheets API Advanced в Resources -> Advanced google Services, и настройте устанавливаемый триггер на странице G Suite Developer Hub Developer Hub , чтобы onFormSubmit() Функция запускается при типе события «При отправке формы».

...