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 шт):
Вероятно, вы получаете ошибку типа
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() триггером на событие редактирования таблицы: