Почему возникает ошибка: Exception: You do not have permission to call SpreadsheetApp.openById?
Это возможно слишком "чайный" вопрос: Есть код:
function AAA1() {
var s =2,
s2 =4,
s3 =5;
var spreadsheet_id = SpreadsheetApp.getActive().getId();
var sheet_name = "Лист1";
return(s+s2+s3);
}
Он рабочий. Результат при вызове функции корректный. Я добавляю еще одну переменную:
var s4 = SpreadsheetApp.openById( spreadsheet_id ).getSheetByName( sheet_name ).getRange(1,1).getValues(); // это строка №7
В Logger.log(s4); результат отображается правильно. Но сам вызов процедуры дает ошибку: Ошибка: Exception: You do not have permission to call SpreadsheetApp.openById. Required permissions: https://www.googleapis.com/auth/spreadsheets (строка 7)
Вопрос: введение в код новой переменной может давать ошибку? Или ошибка в другом?
Ответы (1 шт):
Если коротко, то так сделать нельзя.
Скорее всего проблема в том, что функция вызывается как пользовательская функция.
В сущности, вопрос стоит внимания, потому что он является общим случаем недопонимания процесса.
И так, куда смотреть и что делать.
Способ запуска. От способа запуска зависит многое, т.к. один и тот же код может выполняться по-разному. Называется "смена контекста".
- Как пользовательская формула (специальный ограниченный контекст)
- При вызове из редактора (основной контекст)
- При вызове из UI контейнера (расширенный основной контекст)
- При вызове из триггера
- При вызове из неустановленного дополнения
- При вызове из неразрешенного дополнения
- При вызове из опубликованного веб-приложения
- При вызове опубликованного API
- И еще много чего можно сменить настройками для одного и того же куска (простите) кода.
Распространенной ошибкой является предполагать, что код в редакторе какой-то не такой. На самом деле это уже полноценное приложение. Многие, кто активно использует скрипты, "не парятся" на тему "откуда это запустить", они просто выбирают в редакторе функцию и жмут кнопку запуска.
Вернемся к баранам. При запуске пользовательской формулы контекст кода строго ограничен. Вы не можете вызывать многие методы SpreadsheetApp, например, openById(). См. Custom Functions - Advanced - Using Apps Script services
Интересно, что это не означает, что так делать нельзя. Например, хак описан тут snippets/spreadsheet-get_error_value_formulas. Но это прям надо хорошо вкурить, чтоб оно взлетело.