В FormSubmit создать новый лист, импортировать и переименовать на основе содержимого столбца

У меня есть следующий сценарий, идея которого заключается в том, что когда пользователь отправляет форму (и когда лист заполняет этот ответ), он использует предоставленную информацию для создания нового листа с некоторой информацией, которую они предоставили, для его заполнения.

Пошагово это должно выглядеть так:

  • Пользователь отправляет форму
  • Обновления листа
  • Лист создает новую вкладку / лист
  • Лист переименовывает вновь созданный лист, чтобы отразить содержимое столбца E (их имя)
  • Действия листа - IMPORTRANGE в ячейке A1 только что созданного и названного листа.

Это должно работать всякий раз, когда добавляется новая запись.

Это то, что у меня есть до сих пор, новый лист, основанный на шаблоне, работает, но я не могу понять переименование или части IMPORTRANGE. Если бы кто-нибудь мог взглянуть и помочь мне, это был бы туз!

function FormSubmit(){
  Logger.log('Form Submited');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var lastRow = sheet.getLastRow();
  var Name = sheet.getRange(lastRow, 4).getValue(); 
  var templateSheet = ss.getSheetByName('Template');

 ss.insertSheet(1, {template: templateSheet});

  var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sheetNumber, sourceSheet, newSheetName;  
  for( sheetNumber = 0; sheetNumber < sourceSheets.length; sheetNumber++) {
    sourceSheet = sourceSheets[sheetNumber];
    newSheetName = sourceSheet.getRange("E3").getValue();
   sourceSheet.setName(newSheetName);
  }
}

person SL8t7    schedule 15.01.2018    source источник
comment
Вы можете получить ответы, представленные в форме, из объекта события. Объект события обычно обозначается буквой e: Например: function FormSubmit(e) { Вы не получаете объект события в своей функции, которая установлена ​​как триггер отправки формы. Ссылка на документацию скрипта приложений Вы можете получить ответьте, что является их именем со свойством values или namedValues объекта события. var theirName = e.values[3]; Получить значение из четвертого элемента массива.   -  person Alan Wells    schedule 15.01.2018


Ответы (1)


Непонятно, что вы спрашиваете об "ИМПОРТРАНЖЕ". Сэнди уже написал способ получить имя из фактического отправления формы, однако я буду использовать ваш метод извлечения его из электронной таблицы, поскольку фактическая установка имени листа не имеет большого значения.

Самое простое решение - задать имя листа сразу на вставке. Прочтите об этом здесь, но по сути что бы мы сделали вместо

ss.insertSheet(1, {template: templateSheet});

вместо этого предположим, что вы храните имя в переменной newSheetName. Тогда у нас будет

ss.insertSheet(newSheetName, 1, {template: templateSheet});

или если вам все равно, куда вставлен лист (или, если быть точным, вы хотите, чтобы он был в конце), это также работает:

ss.insertSheet(newSheetName, {template: templateSheet});

Теперь я также хотел бы обратиться к этому блоку в целом:

var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetNumber, sourceSheet, newSheetName;  
for( sheetNumber = 0; sheetNumber < sourceSheets.length; sheetNumber++) {
  sourceSheet = sourceSheets[sheetNumber];
  newSheetName = sourceSheet.getRange("E3").getValue();
  sourceSheet.setName(newSheetName);
}

для начала, var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); можно полностью заменить на var sourceSheets = ss.getSheets(), поскольку вы уже загрузили электронную таблицу.

Этот блок задает имя для всех ваших листов. Это то, чего вы, возможно, не захотите, поскольку у вас есть ответы на форму, а также лист шаблона.

person Vytautas    schedule 16.01.2018