Невозможно скопировать новые данные отправки формы Google на новый лист в Google Sheets - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь скопировать новые данные отправки формы в базе данных Google Sheet на другой лист, в том же файле. Мой код копирует новые данные, введенные мной непосредственно на листе базы данных, однако он отказывается копировать данные, введенные формой Google. Я использую Google Script для этого действия. Ниже приведен мой код.

Я столкнулся с проблемой, из-за которой я не могу вырезать информацию о базе данных, поскольку она защищена формой. Поэтому я также не могу скопировать и вставить его на новый лист со скриптом? Спасибо всем за помощь.

function onEdit(event) {
  // assumes source data in sheet named main
  // target sheet of move to named Completed
  // getColumn with check-boxes is currently set to colu 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Website Form Contacts") { //&& r.getColumn() == 9 && r.getValue() == true
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Initial Lead Contact");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
    // s.getRange(row, numColumns + 1).setValue(false);
    s.deleteRow(row, 8);

  } else if(s.getName() == "Initial Lead Contact" && r.getColumn() == 9 && r.getValue() == false) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Website Form Contacts");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

1 Ответ

0 голосов
/ 30 января 2020

onEdit триггер срабатывает только тогда, когда данные редактируются человеком

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

Вы можете переписать свою функцию следующим образом, используя доступные объекты событий для Form submit и привязав триггер onFormSubmit к функции:

function myFunction(event) {
  var r = event.range;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  if(s.getName() == "Website Form Contacts") {
    var targetSheet = ss.getSheetByName("Initial Lead Contact");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  } else if(s.getName() == "Initial Lead Contact" /*&& r.getColumn() == 9 && r.getValue() == false*/) {
    var targetSheet = ss.getSheetByName("Website Form Contacts");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  }
 r.copyTo(target);
}

Имейте в виду:

  • Вы не можете использовать event.source как formSubmit объект события
  • Условия r.getColumn() == 9 && r.getValue() == false вряд ли будут выполнены on formSubmit
  • При отправке формы часто создаются новые листы с новыми именами, поэтому ваши условия if(s.getName() == ... могут не выполняться

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

Просто свяжите устанавливаемый триггер onFormSubmit и удалите детали, которые не поддерживаются onFormSubmit (например, event.source), и убедитесь, что условие для имени листа выполнено.

Заменить event.source.getActiveRange(); на event.range, что поддерживается как триггерами onEdit, так и onFormSubmit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...