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

Мне нужно работать с таблицами Google. Я использую несколько шаблонов электронных таблиц, которые содержат множество ссылок на другие электронные таблицы. Проблема в том, что всякий раз, когда я делаю копию таблицы шаблона для использования большинства ссылок (созданных с помощью функции importrange), мне нужно снова предоставить им доступ  введите описание изображения здесь

Я хочу создать сценарий, который позволил бы мне импортировать все ссылки одним нажатием. Я попытался создать сценарий приложения, но не нашел способа получить доступ к текстовому полю с помощью кнопки «Разрешить доступ», чтобы я мог создать свой сценарий. Мои вопросы: есть ли способ получить доступ к кнопке "разрешить доступ" программно? или есть другой способ решить мою проблему и разрешить доступ ко всем ссылкам одним нажатием?


person Daniel Sindrestean    schedule 07.08.2014    source источник


Ответы (5)


Мне пришлось столкнуться с той же проблемой. Единственный способ избежать этого Разрешить доступ для диапазона импорта - сделать связанный документ (пункт назначения диапазона импорта) общедоступным или совместно используемым по ссылке, которая также является общедоступной, но если у читателей есть ссылка. Тогда нет необходимости авторизовать importrange. Google должен избегать этого авторизационного доступа, если 2 документа принадлежат одному владельцу, я не понимаю, где здесь нарушение безопасности.

person Cédric NICOLAS    schedule 03.10.2015

Что ж, то, что я сделал, на самом деле не решает проблему, но очень помогает. Я импортировал диапазон всех электронных таблиц, которые я хотел, в третью электронную таблицу. Затем я импортировал этот диапазон в свою модель. Итак, когда создается новый файл, вам нужно разрешить доступ только к одной электронной таблице вместо многих.

Как я уже сказал, это не решает проблему, но это хороший обходной путь.

person Ariel Ferreira    schedule 10.06.2015

Нет, вы не можете получить доступ к кнопке «Разрешить доступ» программно, так как это может привести к нарушению безопасности системы.

Я думаю, что лучший способ предоставить доступ - это перебрать список идентификаторов электронных таблиц и открыть их следующим образом:

var idList = [...]; // here are all the ids

for (var i = 0; i < idList.length; i++) {
    SpreadsheetApp.openById(idList[i]); // trying to open the spreadsheet by id
}

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

Тогда вы сможете импортировать диапазоны из скрипта, а не из самой электронной таблицы. Используйте электронную таблицу и Sheet и классы getRange ().

person Vyacheslav Pukhanov    schedule 07.08.2014
comment
Использование этого по-прежнему не решает мой диапазон импорта - разрешить проблему доступа - person Daniel Sindrestean; 07.08.2014
comment
@ Даниэло Думаю, тогда это невозможно. Вы можете импортировать диапазон с помощью самого скрипта, после авторизации с помощью электронной таблицы и Sheet, используя их функции getRange () - person Vyacheslav Pukhanov; 07.08.2014

По сути, вам просто нужно предоставить доступ кому угодно по ссылке, прежде чем вводить функцию importrange. Должно получиться так:

DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);

А затем снова сделайте его приватным. В этом случае importrange будет работать мгновенно, без нажатия кнопки предоставить доступ.

DriveApp.getFileById(id).setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.EDIT);

Вам также может понадобиться flush().

person Савицкий Алексей    schedule 29.09.2020

Доступ к «импортированному» документу, по-видимому, определяется настройками общего доступа для импортированного документа во время создания «основного» документа (а не шаблона).

Например:

  1. Шаблон A использует importrange () для включения данных из документа B
  2. Доступ к документу B установлен для всех, кроме пользователей Интернета, у которых есть эта ссылка.
  3. Шаблон A используется для создания документа C

Документ C не сможет импортировать содержимое из документа B. Вам придется вручную разрешить доступ.

Если перед тем, как разрешить доступ вручную, вы закроете документ C, измените общий доступ на B на «Все в Интернете, у кого есть эта ссылка, может просматривать», а затем снова откройте документ C, он все равно не сможет импортировать данные из B. Когда документ C был создан, у него не было доступа к документу B для импорта, поэтому он никогда не будет иметь доступа, если вы не предоставите доступ вручную.

С другой стороны:

  1. Шаблон A использует importrange () для включения данных из документа B
  2. Для доступа к документу B установлено значение "Все в Интернете, у кого есть эта ссылка, могут просматривать".
  3. Шаблон A используется для создания документа C

Теперь документ C может без проблем импортировать данные из документа B.

Если вы теперь измените общий доступ к документу B на «Ограниченный», документ C продолжит импортировать данные. Как и в первом случае, при создании документа C у него был доступ к документу B, поэтому он всегда будет иметь доступ.

Importrange () использует совместное использование, как и для импортированного документа во время создания основного документа.

На основе этого и кода, предоставленного Адрианом Моулом, я настроил рабочий процесс для создания моих документов из шаблонов следующим образом:

  1. В скрипте Google Apps просмотрите список включенных идентификаторов документов и установите общий доступ:

    var idList = { "doc-id-1", "doc-id-2", "doc-id-3", [...] };
    for( id=0; id < idList.length; id++ ) {
      DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
    }
    
  2. Создайте несколько документов из шаблона

  3. Вернувшись в скрипт Google Apps, используйте аналогичный код, чтобы закрыть доступ ко всем импортированным документам:

     var idList = { "doc-id-1", "doc-id-2", "doc-id-3", [...] };
     for( id=0; id < idList.length; id++ ) {
       DriveApp.getFileById(id).setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.EDIT);
     }
    

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

Обратите внимание, что между шагами 1 и 3, пока документы создаются из шаблонов, все импортированные документы доступны для общего поиска и доступны в Интернете. Теоретически злоумышленник может создать importrange () в собственной электронной таблице для импорта ваших документов, и он продолжит иметь этот доступ после выполнения шага 3 и повторной блокировки ваших документов.

person arkayneCoder    schedule 24.04.2021