【问题标题】:Google Docs Scripts addToFolderGoogle 文档脚本 addToFolder
【发布时间】:2012-07-18 19:15:28
【问题描述】:

我正在尝试使用 Google Docs 运行脚本的能力为新客户创建必要的文件夹结构(将内容/图像上传到)。到目前为止,这是我所拥有的:

/**
 * This script creates the necessary folder structure for a new client
 */
function newClientSetup() {

  var initial = DocsList.getFolder("Clients");
  var client = DocsList.addtoFolder.createFolder("Client Name");
  var file = DocsList.addtoFolder(client);

};

现在这不起作用 (TypeError: Cannot call method "createFolder" of undefined. (line 7)),但我无法弄清楚如何在 DocList 中使用 Folder 类。我看到DocsList 有一个createFolder 方法,我可以这样使用:

var folder = DocsList.createFolder("Folder Name");

但我尝试从名为 Clients(已在 Google Docs 中)的父文件夹开始,然后创建以下结构:

Clients
    Client Name
        Content
        Images

理想情况下,我可以运行此脚本,但为Client Name 传递一个变量以实际创建客户端名称,但我没有从文档中找到太多帮助。有什么建议么?谢谢!

【问题讨论】:

  • 感谢两位的建议!

标签: javascript google-api google-apps-script google-drive-api


【解决方案1】:

这是一个如何工作的示例,请参阅 cmets :

function createSubFolder(subfolder) { // the argument is the name of the folder you want to create
    var parentfolder = DocsList.getFolder('Clients'); //begin in the client folder (you could also open by Id, I prefer the ID as I find it more failsafe (ID are unique, names aren't necessarily 
    var newFolder = DocsList.createFolder(subfolder); // create the new subfolder from the argument of the function
    newFolder.addToFolder(parentfolder);// add the newly created folder to 'Clients'
}   

要测试这个功能,只需使用类似这样的东西:

function test(){
    createSubFolder('test');// this will create a new folder called test in your Clients folder
}

注意:要获取文件夹的 ID,请在文件夹 url 中的 folder/ 后面取值。 粗体示例:https://drive.google.com/?hl=fr&tab=wo#folders/0B3qSFxxxxxxxxxdsMTFZMDQ

如果您有更多文件夹级别,序列可能会更长...但结构始终相同,并且每个文件夹都是唯一的。

【讨论】:

  • 我喜欢这个简单的!看起来我有点半途而废,但一些核心 JS 知识会有所帮助;)我绝对同意通过 ID 是更好的方法。我正在查看下面的@mhawksey 解决方案,并想知道检查文件夹是否存在是否“必要”。我两次运行相同的函数(使用相同的子文件夹名称),并且由于 Google 按 ID 而不是名称处理文件夹,因此该函数没有尝试在我创建的现有 test 文件夹中插入文件夹(它是单独的)。谢谢!
  • 另外(更一般的问题),在运行脚本时,是否有更简单的方法来传递 subfolder 参数(无需进入脚本来运行它)?例如,项目经理将为每个客户创建子文件夹结构——我不确定谷歌是否有模式弹出窗口可以传递这些信息(这里更多的是“最佳情况”的愿望,但我想知道如果你熟悉的话)。谢谢!
  • 您可以通过多种方式输入文件夹名称...最简单的方法是使用Browser.inputBox(prompt),但您也可以更优雅地构建用户界面来创建数据。此外,根据您获取客户端名称的方式,它可以完全自动化,但我对您的用例了解不多。
  • 嗨,Serge - 感谢您在这里继续输入 - 我一定会研究您的建议。谢谢!
【解决方案2】:

这是我编写的一个函数和一些代码,可能会对您有所帮助。它使用子函数来查看文件夹是否已经存在以及是否不存在。如果文件夹已经存在,它会返回有助于链接的对象 (referenced here on how it is used):

function newClientSetup() {
   var ROOT_FOLDER = "Clients";
   var CLIENTNAME_FOLDER = "Client Names";

   // get a the system route folder (if it deosn't existing make it 
   var rootFolder = folderMakeReturn(ROOT_FOLDER); 
   // create/get draft and release folders 
   var clientNamesFolder = folderMakeReturn(CLIENTNAME_FOLDER,rootFolder, ROOT_FOLDER+"/"+CLIENTNAME_FOLDER);   
}

// function to see if folder exists in DocList and returns it 
// (optional - if it doesn't exist then makes it) 
function folderMakeReturn(folderName,optFolder,optFolderPath){ 
   try { 
      if (optFolderPath != undefined){ 
         var folder = DocsList.getFolder(optFolderPath); 
      } else { 
         var folder = DocsList.getFolder(folderName); 
      } 
      return folder; 
   } catch(e) { 
      if (optFolder == undefined) { 
         var folder = DocsList.createFolder(folderName); 
      } else { 
         var folder = optFolder.createFolder(folderName); 
      } 
      return folder; 
   } 
}

【讨论】:

    【解决方案3】:

    我知道问题/答案已有 3 年历史,之前它是正确的,但该解决方案不再像 2015 年那样与 Google Apps 脚本一起正常工作,目前在特定文件夹上创建子文件夹的最简单方法是,

    function createSubFolder(parentId, folderName)
    {
      var id="";
      try
      {
        var parent=DriveApp.getFolderById(parentId);   // get parent folder
        var folder =parent.createFolder(folderName);   // create sub folder 
        id=folder.getId();                             // get the subfolder id to return
      }
      catch(e)
      {
      }
      return id;
    }
    

    将父文件夹ID与您要创建的子文件夹名称一起传递,Folder类具有方法createFolder在其下创建一个文件夹,该文件夹返回创建的子文件夹的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多