Google Таблицы: перемещение строки на другой лист - PullRequest
0 голосов
/ 09 июля 2020

Впервые в Google Таблицах и в этом языке в целом. Мы только поигрались с VBA в имеющейся у нас базе данных Access, но на самом деле упирались в стену. Я нашел много похожих сообщений, но все еще не смог обойти мою проблему. один триггер onEdit, который вызывает их обоих. Материал работает отлично.

Теперь я пытаюсь проделать то же самое с другой обнаруженной функцией, которая перемещает строку с одного листа на другой на основе определенных критериев. Сам по себе, как триггер onEdit, он делает именно то, что я хочу, это код:

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  
  if(s.getName() == "Active_POs" && r.getColumn() == 23 && r.getValue() == 1) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Need_Entered_QB");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
}
}

Когда я запускаю его как триггер onEdit, он отлично работает. Когда я пытаюсь изменить его на собственную функцию, а затем вызываю ее через свой основной onEdit, ничего не работает. Мой основной onEdit выглядит так:

function onEdit(e){
  applyFormat(e);
  adddate();
}

Оба они называются нормально, я предполагаю, что мне повезло, когда я нашел их как триггеры onEdit (), я просто изменил имя onEdit на что-то уникальное и все еще можно назвать прекрасным. Если я попытаюсь изменить указанное выше на «moverow ()» или что-то подобное и назову это с другими моими вещами, ничего. Я уверен, что это очевидно, почему это происходит, но я недостаточно хорошо осведомлен, чтобы понять, что я делаю, кроме того, что знаю, что делаю что-то не так.

По-моему, я должен смогу получить что-то подобное, как только я узнаю, в чем моя проблема:

function onEdit(e){
  applyFormat(e);
  adddate();
  moverow();
}

Но в чем именно заключается моя проблема? Как мне изменить функциональный код, чтобы переместить строку в ее собственную функцию, которую я могу вызвать в своем триггере onEdit?

1 Ответ

0 голосов
/ 09 июля 2020
  • Если ваша новая функция moverow() включает в себя содержимое вашей старой onEdit(event) функции, это означает, что она полагается на наличие объекта события.
  • В противном случае вызовы типа event.source.getActiveSheet() won ' t work
  • Это означает, что вы должны передать moverow() объект события, поэтому:
function onEdit(e){
  applyFormat(e);
  adddate();
  moverow(e);
}

function moverow(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();  
  if(s.getName() == "Active_POs" && r.getColumn() == 23 && r.getValue() == 1) 
   {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Need_Entered_QB");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}
function applyFormat(event) {
  ...
}
function adddate() {
  ...
}

Примечание:

Вы должны убедиться, что различные вызываемые функции не конфликтуют друг с другом - вызовы SpreadsheetApp являются асинхронными.

Рекомендуется реализовать SpreadsheetApp.flu sh () между вызовами разных функций.

...