Как запросить или получить разрешение доступа к электронной таблице Google в скрипте приложений другого листа? - PullRequest
1 голос
/ 07 января 2020

Я пишу скрипт приложения из электронной таблицы A для своих пользовательских функций и пытаюсь получить оттуда значения в электронной таблице B, используя openUrl()

Однако я получаю ERROR в электронной таблице A при использовании пользовательская функция ..

в Документе Google, она говорит

Если ваша пользовательская функция выдает сообщение об ошибке У вас нет разрешения на вызов службы X., служба требует авторизации пользователя и, следовательно, не может использоваться в пользовательской функции.

ref: https://developers.google.com/apps-script/guides/sheets/functions

Однако, это ничего не говорит о том, как получить разрешение. .

  1. Я пытался с общей ссылкой для всех, но это не сработало.
  2. Я пытался с url&scope=https://www.googleapis.com/auth/spreadsheets

Оба способа не Работа. Как я могу решить эту проблему?

enter image description here

Ответы [ 2 ]

2 голосов
/ 07 января 2020

К сожалению, то, что вы просите, не может быть сделано напрямую. В той же документации, пожалуйста, прокрутите весь путь до публикации; это -

Пользовательские функции в Google Sheets> Дополнительно> Общий доступ .

Здесь вы увидите следующее -

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

Если вам это подходит, вы можете использовать 3 метода, которые они там перечислили, чтобы преодолеть эту проблему.

Надеюсь, это поможет!

0 голосов
/ 07 января 2020

Вот как я решил:

Вы не можете получить доступ к другим файлам электронных таблиц, что означает, что вы не можете использовать openById() или openByUrl(). Таким образом, есть только один метод, который вы можете достичь - используя getActiveSpreadSheet(), которая является текущей электронной таблицей, к которой относится скрипт приложения.

Если вы хотите скрыть исходный файл, то вы можете сделать ссылку файл, который доступен для всех. И ваш оригинальный файл является личным.

Итак, вам нужно сделать еще один файл для совместного использования.

  1. оригинальный файл (частный)

Использование getactiveSpreadSheet() вместо openById() или openByUrl(). И реализовать ваши пользовательские функции. У вас не возникнет проблем с доступом к текущей электронной таблице таким образом.

function YOUR_CUSTOM_FUNCTION(val1, val2, ...){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("YOUR_SHEET_NAME");

    return getMyValue(val1, val2, ...);
}

function getMyValue(val1, val2, ...){
    var result = 0;

    // TODO: calculate values as you want.

    return result;
}

Используйте свою пользовательскую функцию в файле следующим образом:

=YOUR_CUSTOM_FUNCTION(E5, F6, ...)

Вы не получите никаких ОШИБКА.

справочный файл (общий)

Вы можете создать справочный лист, используя:

=IMPORTRANGE("spread sheet link","sheet_name!range")

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

* диапазон - это что-то вроде A:C или A1:Z55.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...