Сценарий приложения Google: невозможно получить следующий объект: итератор достиг конца - PullRequest
2 голосов
/ 15 апреля 2020

Общий доступ к папкам на Google Shared Drive не работает, поэтому я пытаюсь автоматизировать общий доступ с помощью скрипта приложения.

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

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

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

function myFunction() {
  var folderid = ""
  var folder = DriveApp.getFolderById(folderid);
  var files = folder.getFiles();
  while (files.hasNext()) {
    Logger.log(files.next().getName());
    files.next().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  }
}

1 Ответ

2 голосов
/ 15 апреля 2020

Проблема:

.next() возвращает файл next в folder. Если folder имеет 1 файл, files.hasNext() возвращает true и files.next() возвращает file1. Повторный вызов files.next() возвращает

Невозможно получить следующий объект: итератор достиг конца '

  • Первый вызов итератора: файл # 1

    Logger.log (files.next (). GetName ());

  • Второй вызов итератора: следующий файл (недоступно)

    files.next (). SetSharing (DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

Если в папке 5 файлов , Logger зарегистрировал бы имена файлов 1,3 и 5. Совместное использование было бы установлено для файлов 2 и 4.

Решение:

Вызовите files.next() только один раз после проверка с помощью files.hasNext()

Фрагмент:

  while (files.hasNext()) {
    const nextFile = files.next();//one call
    Logger.log(nextFile.getName());
    nextFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  }

Ссылки:

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