#google-apps-script
#google-apps-script
Вопрос:
Один из моих скриптов использует SpreadsheetApp.openById(ID)
для получения данных из электронной таблицы. Скрипту были предоставлены разрешения на открытие файла, и пользователь скрипта имеет доступ на запись в файл. Однако иногда скрипт возвращает следующую ошибку :
You do not have permission to call SpreadsheetApp.openById. Required permissions: https://www.googleapis.com/auth/spreadsheets at [unknown function](Code:11)
В других случаях проблем нет, и скрипт работает отлично. Есть идеи / помощь о том, как это исправить?
Пример скрипта :
var spreadsheet = SpreadsheetApp.openById("1m65QVfk9Xx2zOwUxewdSjWCDK-g_jHj7ETFVFF0rjxY")
function myFunc() {
sheet = spreadsheet.getActiveSheet()
prepareHours()
inputDisplays()
}
Ответ №1:
Вы не можете «дать скрипту разрешение на открытие файла», потому что скрипт не является автономным: пользователь выполняет скрипт. Если пользователь, вызывающий выполнение скрипта, делает это способом, который не предоставляет авторизации — например, выполнение простого триггера, такого как функция с именем onOpen
или onEdit
, — тогда любые вызовы, требующие авторизации, завершатся ошибкой на основе разрешений, подобной той, которой вы делитесь.
Поскольку глобальные переменные вычисляются для каждого экземпляра Apps Script, всегда рекомендуется избегать вызова API / сервисных вызовов в глобальной области. Кроме того, поскольку простые триггеры выполняются для любого пользователя, имеющего разрешение на редактирование документа, рекомендуется избегать использования методов, требующих пользовательских разрешений, в ситуациях с ограниченными AuthMode
правами.
- Простые ограничения запуска
- Выполняющий пользователь
-
Предупреждение: При запуске вашей
onOpen(e)
функции загружается весь скрипт и выполняются любые глобальные инструкции. Эти инструкции выполняются в том же режиме авторизации, что иonOpen(e)
, и завершаются ошибкой, если режим запрещает их. Это предотвращаетonOpen(e)
запуск. Если в вашем опубликованном дополнении не удается добавить свои пункты меню, загляните в консоль JavaScript браузера, чтобы узнать, была ли выдана ошибка, затем изучите свой скрипт, чтобы узнать, вызывает лиonOpen(e)
функция или глобальные переменные службы, которые не разрешены вAuthMode.NONE
.
Комментарии:
1. Что я имел в виду, предоставляя скрипту разрешение на открытие файла, так это предоставление пользователю , который будет выполнять скрипт, разрешения на открытие / редактирование указанного файла. Спасибо за совет по глобалям, однако я попытаюсь обрезать их вызов и проверить еще раз.
2. Это скрипт on edit или on open? В примере скрипта, которым вы поделились, нет завершающих точек с запятой, поэтому я предполагаю, что это был просто псевдокод
3. @J.G. точки с запятой необязательны из-за ASI JavaScript. Тем не менее, они настоятельно рекомендуются.