Автоматическое копирование строк в Google Sheets - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь написать несколько функций, которые

  1. копируют отправку формы в Google из листа "Отправка формы" на лист "Все ссылки"
  2. переместить всю строку из " Лист «Все отведения» на лист «Открытые отведения» на основе значения в ячейке = «открытый»
  3. переместить данные всей строки обратно на «Все отведения» или «закрытые», «потерянные» на основе значения в ячейке = «закрыто / потеряно / пусто»

 var sheetNameToWatch = "Form Responses";
 var columnNumberToWatch = 3;
 var sheetNameToMoveTheRowTo = "All Leads";

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = SpreadsheetApp.getActiveSheet();
 var range = sheet.getActiveCell();

 if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && isBlank(range) == FALSE) {
   var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
   var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
   sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
   //sheet.deleteRow(range.getRow());

 }

}

Но я не получаю это, чтобы вызвать onEdit или onFormSubmission. Любая помощь приветствуется, и, как вы можете сказать, я новичок в написании сценариев.

Вот общая таблица Google

https://docs.google.com/spreadsheets/d/13090GHrXY17lRzA9ppQHZZGyT9yUNk6hMMXDQIKmddI/edit?usp=sharing

1 Ответ

2 голосов
/ 27 февраля 2020

Поскольку у вас уже есть записей , хранящихся в вашей электронной таблице, вам нужно просто запустить этот фрагмент один раз, чтобы скопировать уже сохраненные значения на их место. Это работает, собирая все данные, требуемые из листа Form Responses, используя метод getRange(row, col, numrows, numcols), а затем вставляя значения, используя метод setValues().

function copyStuff() {
  var spreadsheet = SpreadsheetApp.openById("ID_OF_YOUR_SPREADSHEET");
  var allLeads = spreadsheet.getSheetByName("All Leads");
  var formSub = spreadsheet.getSheetByName("Form Responses");
  var valsFromForm = formSub.getRange(3, 1, 53, 13).getValues();
  allLeads.getRange(2, 1, 53, 13).setValues(valsFromForm);
}

После этого вы должны заменить вышеуказанное фрагмент с этим:

function onFormSubmit() {
  var spreadsheet = SpreadsheetApp.openById("ID_OF_YOUR_SPREADSHEET");
  var allLeads = spreadsheet.getSheetByName("All Leads");
  var formSub = spreadsheet.getSheetByName("Form Responses");

  var openSheet = spreadsheet.getSheetByName("Open Leads");
  var closedSheet = spreadsheet.getSheetByName("Closed");
  var lostSheet = spreadsheet.getSheetByName("Lost");

  var lastVals = formSub.getRange(formSub.getLastRow(), 1, 1, 13).getValues();
  allLeads.getRange(allLeads.getLastRow(), 1, 1, 13).setValues(lastVals);


  var cellValue = spreadsheet.getSheetByName("THE_NAME_OF_YOUR_SHEET_WHERE_CELL_VALUE_IS").getValue();

  if (cellValue == "OPEN")
    openSheet.getRange(openSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
  else if (cellValue == "CLOSED")
    closedSheet.getRange(closedSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
  else if (cellValue == "LOST")
    lostSheet.getRange(lostSheet.getLastRow(), 1, 1, 13).setValues(lastVals);


  var lastVals = formSub.getRange(formSub.getLastRow(), 1, 1, 13).getValues();
  allLeads.getRange(allLeads.getLastRow(), 1, 1, 13).setValues(lastVals);
}

Приведенный выше фрагмент работает, получая последнюю строку из таблицы, а затем вставляя ее в нужное место на основе cellValue. Чтобы получить последнюю строку листа, был использован метод getLastRow().

Поскольку вы хотите, чтобы он выполнялся на при каждой отправке формы , вы должны использовать onFormSubmit() устанавливаемый триггер и настройте его следующим образом:

onFormSubmit() trigger configuration

Примечание: У вас должен быть сценарий , связанный с формой .

Ссылка

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