Google sheets выгрузка из одной таблицы в другую при помощи onEdit

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

Цель: При вызове Функции onEdit чтобы на 1 странице скрывались строки ( работает ),на другой странице копировались столбцы ( работает ), на третьей странице из другой таблицы шел импорт всей информации ( не работает и ломает все функции, что единоразовый вызов, что при вызове через onEdit )

//ИМПОРТ информации из другой таблицы ( отдельно этот кусок работает исправно на отдельной вкладке, но если добавляю onEdit еще на отдельной вкладке, то и на других вкладках все ломается)
function vigruzka() {
  var extsheet = SpreadsheetApp.openById('1ADG334LHPlVzc1Fja3rxXQjvor3DaQzFhbId2HWkDJ8').getSheetByName('test1');
  var rownumber = extsheet.getLastRow();
  var colnumber = extsheet.getLastColumn();
  var extdata =  extsheet.getRange(1, 1, rownumber, colnumber).getValues();
  SpreadsheetApp.getActive().getSheetByName('TEST').getRange(1, 1, rownumber, colnumber).setValues(extdata);
}

// Скрытие строк по цвету
function hideempty() {

var sshide = SpreadsheetApp.getActiveSpreadsheet();
var sheethide = sshide.getSheetByName("Заезд/Бронь");
var lastRowhide = sheethide.getLastRow();
var arrayhide = sheethide.getRange(1, 1, lastRowhide).getBackgrounds();

for (i=0 ;i <= lastRowhide;i++){
if(arrayhide[i]== "#999999"){
sheethide.hideRows(i+1);

}
  }
}

// Копирование столбцов с информацией
function copyValueFromCellToCell() {
  var sheet = SpreadsheetApp.getActiveSheet();
  const sourceCell = sheet.getRange('U3:U219');
  const targetCell = sheet.getRange('V3:V219');
  targetCell.setValues(sourceCell.getValues());
}

function onEdit (f) {
  if (f.range.getSheet().getName() == "УБОРКИ") {  
  copyValueFromCellToCell();
  }
  if (f.range.getSheet().getName() == "Заезд/Бронь") {  
  hideempty();
  }
  //Если Вставляю вызов импорта сюда, ломается так же
  if (f.range.getSheet().getName() == "TEST") {  
  vigruzka();
  }
}


Ответы (1 шт):

Автор решения: Boris Baublys

Вероятно, вы получаете ошибку типа

Exception: Вам не разрешено вызывать пользователя SpreadsheetApp.openById. Необходимые разрешения: https://www.googleapis.com/auth/spreadsheets. at vigruzka(Код:3:33) at onEdit(Код:56:5)

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

А) Уберите из onEdit() запуск vigruzka():

function onEdit(e) {
  if (e.range.getSheet().getName() == "УБОРКИ") {
    copyValueFromCellToCell();
  }
  if (e.range.getSheet().getName() == "Заезд/Бронь") {
    hideempty();
  }
}

Б) Перенесите проверку листа TEST в vigruzka():

function vigruzka() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  if (activeSheet.getName() !== "TEST") return;
  var extsheet = SpreadsheetApp.openById('URL').getSheetByName('test1');
  var rownumber = extsheet.getLastRow();
  var colnumber = extsheet.getLastColumn();
  var extdata = extsheet.getRange(1, 1, rownumber, colnumber).getValues();
  SpreadsheetApp.getActive().getSheetByName('TEST').getRange(1, 1, rownumber, colnumber).setValues(extdata);
}

В) Установите запуск функции vigruzka() триггером на событие редактирования таблицы:

Устанавливаемый триггер

→ Ссылка