Как я могу автоматизировать запросы OAuth в Google Таблицах при клонировании файла? - PullRequest
1 голос
/ 09 июля 2020

У меня есть файл электронной таблицы на Диске, который с помощью сценария создает другой файл во вложенной папке, копируя файл шаблона и переименовывая его. Этот новый файл также использует некоторые сценарии, требующие OAuth. Проблема в том, что новый файл выполняет функцию onOpen (), но он не будет работать должным образом, потому что ему требуется одобрение OAuth. Файлы шаблонов уже авторизованы, но мне пришлось создать кнопку, чтобы один или несколько раз запускать функцию onOpen. Есть ли способ «пропустить» OAuth, чтобы каждый раз, когда я клонирую шаблон, новый файл уже имеет разрешения OAuth?

Это код главного файла, который создает подфайлы:

var newfile = template.makeCopy("newname",folder);
newfile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

Это код нового файла:

function onOpen(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getSheetByName('sheet1').getRange('A1');
  var name = ss.getName();
  
  if(range.getValue() != name){
    range.setValue(name);
  }
}

Проблема в том, что когда я открываю файл, содержимое A1 не изменяется. Мне нужно открыть скрипт, запустить функцию onOpen, авторизовать OAuth и повторно запустить функцию.

Любой способ автоматизировать это, чтобы мне не приходилось повторно авторизовать каждый новый файл? 1012 * Заранее спасибо.

РЕДАКТИРОВАТЬ: На моем Диске у меня есть файл с именем «ProjectManager» и папка с именем «Проекты», где у меня есть файл с именем «Шаблон». В ProjectManager есть кнопка для дублирования шаблона и его переименования. Он запускает следующий сценарий:

var template = DriveApp.getFilesByName('Template').next();
var newfile = template.makeCopy("name", folder);
newfile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

«имя» и «папка» были определены ранее.

Теперь шаблон (и, следовательно, новый файл) запускает следующий сценарий:

function onOpen() {
  var ss    = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getSheetByName('sheet1').getRange('A1');
  var name  = ss.getName();
  
  if (range.getValue() != name) {
    range.setValue(name);
  }
}

И ProjectManager, и шаблон (и копии) выполняют другие функции. Но когда я открываю новый файл, функция onOpen не влияет на файл. Я добавил кнопку для повторного запуска функции onOpen после открытия файла, но появляется окно OAuth; этого не происходит с шаблоном, который уже авторизован.

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

Между прочим, я здесь как бы нуб; просто к вашему сведению.

...