Google脚本:在现有父级中创建并公开共享文件夹

时间:2013-08-04 14:44:03

标签: google-apps-script directory parent sharing subdirectory

所以我想创建和(公开)在现有父级中共享一个新文件夹。

例如:\ 2013年9月\ [此处为新文件夹]

当然,你可以:

  1. 使用createFolder在根目录
  2. 中创建文件夹
  3. 使用addToFolder将新创建的文件夹复制到给定的父级
  4. 使用removeFromFolder从根目录中删除文件夹
  5. 但是,公开分享该文件夹是不可能的!

    确实,如果您尝试使用:setSharing(DriveApp.Access.ANYONE,DriveApp.Permission.EDIT);

    你会得到:“TypeError:在对象文件夹中找不到函数setSharing。”

    没错,上面的DriveApp功能似乎只适用于使用DriveApp.createFolder制作的文件夹。

    当然,没有办法简单地说:

    1. 使用DriveApp.createFolder在根目录
    2. 中创建文件夹
    3. 使用setSharing公开分享新创建的文件夹
    4. 将新文件夹移动到所需的子文件夹
    5. ......因为没有移动方法!

      有没有人找到解决这个问题的方法?

2 个答案:

答案 0 :(得分:3)

您不需要使用2个服务,driveApp已经为您所需要的内容构建了

你只是忘了你可以从另一个创建一个文件夹,而不仅仅是从root ...因此你不需要移动任何东西。

示例:

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

要解决这些简单的问题,请考虑使用自动完成功能,请参阅下面的屏幕截图:

enter image description here

如果您的父文件夹已经存在或者您不确定它,这里是一个处理所有用例的函数:(+一个测试函数的函数)

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);
  } 
}

答案 1 :(得分:2)

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);
}