Необходимо запустить триггер, когда изменение происходит в ячейке определенного диапазона - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть электронная таблица, где пользователи могут обновлять ячейку в столбце «J» с примечаниями, однако, когда они обновляют эту ячейку, мне нужен мой скрипт для запуска. Затем он скопирует всю информацию из столбцов «I» и «J» и вставит их в другую ячейку, а затем поместит формулу Vlookup обратно в «J», откуда она только что взяла информацию.

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

Однако я пробовал множество решений и не могу запустить его при смене ячейки.
Я попробовал установить триггер изменения, но он работает на всю книгу и часто приводит к удалению информации, которую он должен копировать.

Я вставил код, над которым работаю, ниже, любая помощь будет благодарна.

function onChange(e) 
{
  var editRange = { // J:J
    top : 2,
    bottom : 2000,
    left : 10,
    right : 10
  };

  // Exit if we're out of range
  var thisRow = e.range.getRow();
  if (thisRow < editRange.top || thisRow > editRange.bottom) return;

  var thisCol = e.range.getColumn();
  if (thisCol < editRange.left || thisCol > editRange.right) return;

  //Where Is The Data Stored That You Want To Copy
  var ss = SpreadsheetApp.openById("1ZQLKnCHD9acTXCKpTeOnJshHEz43FDPdKZ-U6Me-k_k")
  var West = ss.getSheetByName("West Orders")
  var WestNotes = ss.getSheetByName("West Notes")

  //Ranges of The Data You Want To Copy
  var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues()

    //Clear The Data Before Overiding
  var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear()

  //Ranges Of The Data You Want To Store
  var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);

  //Put a formula in to update Notes;
  var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")'
  var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula)
  }

Ответы [ 2 ]

2 голосов
/ 14 апреля 2019

Событие onEdit

Триггер изменения не является простым триггером.Вы должны установить его самостоятельно.В этом объекте события также нет e.range.Я полагаю, что если бы вы проверили свои исполнения, вы бы увидели некоторые ошибки.

Я изменил ваш код для простого триггера onEdit ().Но вам, возможно, придется установить его, если вы делаете что-то, для чего требуются разрешения.И похоже, что вы есть.Так что теперь вы сможете продолжить отладку своего кода.

function onEdit(e) {
  var editRange = {top:2,bottom:2000,left:10,right:10};
  var thisRow=e.range.rowStart;
  if (thisRow<editRange.top || thisRow>editRange.bottom)return;
  var thisCol=e.range.columnStart;
  if (thisCol<editRange.left || thisCol>editRange.right)return;
  var ss = SpreadsheetApp.openById("id");
  var West = ss.getSheetByName("West Orders");
  var WestNotes = ss.getSheetByName("West Notes");
  var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues();
  var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear();
  var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);
  var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")';
  var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula);
}

Я должен был упомянуть, что вам нужно добавить идентификатор в строке 7.

0 голосов
/ 03 мая 2019

Простое изменение в строке 7 скрипта устранило проблему, вместо использования .openById я использовал .getActiveSpreadsheet

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