Скрипт Google Apps не полностью выполняется для других пользователей после того, как был представлен V8 - PullRequest
1 голос
/ 28 мая 2020

Я написал сценарий (с большой помощью добрых ребят), который копирует папку (и ее содержимое) на Google Диск с помощью скриптов Google Sheets.

Долгое время он работал нормально, но потом Я включил двигатель V8 (сейчас отключен). Проблема в том, что он все еще работает для меня (и, возможно, еще двух пользователей), но не работает для всех остальных. Я не программист, но я узнал достаточно, чтобы помочь мне автоматизировать некоторые задачи в Excel / Таблицах.

До сих пор я пробовал перепроверить все разрешения, создать новый лист, назначить новых владельцев, удалить триггеры, узнайте больше о V8. Но на самом деле это не работает, потому что я даже не могу понять проблему.

Буду признателен за любые предложения. TIA

PS: Мы используем общие диски, и папка Source / Target доступна всем пользователям.

Вот сценарий:


function onClick() {
  ss.getRange("B2:B8").clearContent();
}



function start() {


  var sourceFolder = ss.getRange("B19").getValue() ; // Change every month
  var targetFolder = ss.getRange("B22").getValue();

  var source = DriveApp.getFoldersByName(sourceFolder); // Grab the folder we're going to copy
  var parentFolder=DriveApp.getFolderById(ss.getRange("B11").getValue()); // Destination for the new folder.
  var target = parentFolder.createFolder(targetFolder); 

  if (source.hasNext()) {
    copyFolder(source.next(), target);
  }

}

function copyFolder(source, target) {

  var folders = source.getFolders();
  var files   = source.getFiles();
  var prefix = ss.getRange("B23").getValue(); 

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), target).setName(prefix + file.getName()); 

  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);

    var NewFolderUrl = target.getUrl()
    SpreadsheetApp.getActiveSheet().getRange('B8').setValue(NewFolderUrl);

  }  
  //file.setName(prefix + file.getName());
}

Ответы [ 2 ]

1 голос
/ 15 июня 2020

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

Проблема в том, что скрипт не прикрепляется к электронной таблице. Вы можете попробовать объявить переменную ss в функции start. Другая проблема для упомянутого поведения может быть вызвана передачей в функции неправильных переменных. Вы можете проверить это, используя console.log() и проверив, являются ли переменные ожидаемыми или нет.

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

Ссылка

0 голосов
/ 19 июня 2020

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

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