Сценарий Google Apps PERMISSION_DENIED с надстройкой листов - PullRequest
2 голосов
/ 26 февраля 2020

Я попытался реализовать простое расширение "Multi selector sidebar" на основе ЭТОГО ЛИСТА , которое я нашел в этой ветке поддержки Google

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

Я создал упрощенный тестовый проект, который также не работает для меня.

Чтобы воспроизвести ошибка:

  1. Создайте новую электронную таблицу на https://docs.google.com/spreadsheets/
  2. Создайте второй лист (вкладка внизу слева) и назовите его КАТЕГОРИИ
  3. Заполните несколько полей в первом столбце. Содержание не имеет значения categories
  4. Доступ к инструментам -> Редактор скриптов

В поле "code.gs" ​​введите

function doGet() {
  var html = HtmlService.createHtmlOutputFromFile('Index')
      .setTitle('Multiple selector')
      .setWidth(300);
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
      .showSidebar(html);
}

function onOpen(e) {
    SpreadsheetApp.getUi().createMenu('Index')
        .addItem('Show Sidebar', 'doGet')
        .addToUi();
        doGet();
}

function getOptions() {
  var validation = {
    sheet: 'CATEGORIES',
    range: 'A2:A'
}

  Logger.log("running getOptions");
  Logger.log(SpreadsheetApp.getActive().getSheetByName(validation.sheet).getRange(validation.range).getDisplayValues());
    return SpreadsheetApp.getActive().getSheetByName(validation.sheet).getRange(validation.range).getDisplayValues()
        .filter(String)
        .reduce(function(a, b) {
            return a.concat(b)
        })
}

И создайте второй файл (HTML file) с именем Index. html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function onFailure(error) {
        var div = document.getElementById('output');
        div.innerHTML = "ERROR: " + error.message;
      }

      google.script.run.withFailureHandler(onFailure)
          .getOptions();
    </script>
  </head>
  <body>
    <div id="output"></div>
  </body>
</html>

Testproject with the code

Сохранить проект Нажмите Run-> Run function -> "onOpen" (при первом запуске вам, вероятно, потребуется авторизовать приложение)

Теперь на листе Должна быть боковая панель, которая открывается с ошибкой для меня PERMISSION_DENIED

enter image description here

Даже когда я выбираю проект в Ресурсах -> Проект облачной платформы, он не будет работать.

Как ни странно, если я использую исходную связанную (рабочую) электронную таблицу и что-то изменю в коде, она больше не будет работать для меня.

Вещи, которые я знаю к настоящему времени : - Он не работает с моей учетной записью gmail или приложений Google - Для других людей, использующих тот же документ, он работает - По-прежнему не работает, если я отключаю Adblocker - Не работает, если я получаю доступ к листу из режима инкогнито - Он делает работать, если я использую Firefox вместо Chrome

Console log from the browser

Чего мне не хватает?

1 Ответ

3 голосов
/ 04 марта 2020

У меня та же проблема с сообщением об ошибке «Отказано в доступе», и я нашел это

https://github.com/burnnat/page-sizer/issues/3

Я думаю, что проблема заключается в что я вошел в несколько учетных записей Google, когда я работаю над этим. Я вышел из всех учетных записей Google, затем вошел только в одну учетную запись , которую я пытался использовать formMule, и это сработало.

, поэтому я попробовал точно такой же код с инкогнито в режиме chrome, в который вошла только одна учетная запись, и это работает!

Надеюсь, это поможет вам решить вашу проблему.

...