Хобрук: Ваш путь к мастерству в программировании

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

Итак, я хочу создать и (общедоступно) открыть доступ к новой папке в существующей родительской папке.

Например: \сентябрь 2013 г.\[новая папка здесь]

Конечно, вы могли бы:

  1. Используйте createFolder, чтобы создать папку в корне
  2. Используйте addToFolder, чтобы скопировать вновь созданную папку в заданную родительскую папку.
  3. Используйте removeFromFolder, чтобы удалить папку из корня

Но тогда публично поделиться этой папкой невозможно!

Действительно, если вы попытаетесь использовать: setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);

Вы получите: «TypeError: не удается найти функцию setSharing в папке объекта».

Все верно, описанная выше функция DriveApp работает только с папками, созданными с помощью DriveApp.createFolder.

И, конечно же, нельзя просто:

  1. Используйте DriveApp.createFolder, чтобы создать папку в корне
  2. Используйте setSharing, чтобы публично поделиться вновь созданной папкой
  3. Переместите новую папку в нужную подпапку

... так как нет метода перемещения!

Кто-нибудь нашел решение такой проблемы?


Ответы:


1

Сочетание DocsList и DriveApp может быть полезным.

/* CODE FOR DEMONSTRATION PURPOSES */
function main() {
  var parentFolder = DocsList.getFolder('September 2013');
  var idNewFolder = parentFolder.createFolder('New Folder').getId();
  var newFolder = DriveApp.getFolderById(idNewFolder);
  newFolder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
}
04.08.2013
  • Я не знаю, почему этот ответ был отклонен - ​​я хотел бы услышать от того, кто это сделал, с объяснением, из которого мы все можем извлечь уроки. Лично мне это нравится И ответ @sergeinsas: +1 к обоим! 24.08.2013
  • @Mogsdad Я не минусовал его, но это могло быть потому, что DocsList был «заменен» приложением Drive с исправлениями ошибок и т. Д. (Я предполагаю, что они оставили DocsList там, чтобы не нарушать полностью старые сценарии.) См. это ответ об ошибке и Объявление в блоге. Я предполагаю, что DocsList в конечном итоге устареет, поэтому лучше избегать его. 08.10.2013

  • 2

    Вам не нужно использовать 2 сервиса, все необходимое уже встроено в driveApp.

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

    пример :

    function createSharedFolder() {
      var parent = DriveApp.createFolder('testFolder');
      var child = parent.createFolder('child');
      child.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
    }
    

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

    введите здесь описание изображения

    если ваша родительская папка уже существует или вы не уверены в этом, вот функция, которая обрабатывает все варианты использования: (+ функция для проверки функции)

    function test(){
     createSharedSubFolder('Testparent','Testchild2');
    }
    
    function createSharedSubFolder(parent,child) { // folder names as string parameters
      var folders = DriveApp.getFolders();
      var exist = false
      while (folders.hasNext()) {
        var folder = folders.next();
        if(folder.getName()==parent){exist = true ; var folderId = folder.getId() ; break};// find the existing folder
     }
      if(exist){
      var child = DriveApp.getFolderById(folderId).createFolder(child).setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
      }else{
      var childFolder = DriveApp.createFolder(parent).createFolder(child);
      childFolder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
      } 
    }
    
    04.08.2013
  • Поскольку родительская папка уже существует, есть ли прямой способ найти ее через DriveApp? 04.08.2013
  • В DriveApp отсутствует функция getFolder(path), поэтому здесь я предпочитаю использовать DocsList. 04.08.2013
  • действительно... кажется, что гуглеры любят итераторы!, тем не менее, итераторы тоже очень хороши, а код остается достаточно коротким, так что это совсем не так уж плохо. 04.08.2013
  • Обычно всегда есть несколько способов решить проблему, итераторы — еще один вариант, но DocsList может сделать это напрямую. 04.08.2013
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..