【问题标题】:How do I create a file in a folder?如何在文件夹中创建文件?
【发布时间】:2012-08-11 00:10:04
【问题描述】:

我有一个 Apps 脚本,它可以创建多个文件并将它们移动到一个文件夹中。有没有办法将文件直接放在文件夹中,还是我首先必须获取文件然后将其复制到适当的文件夹,然后将其从根文件夹中删除,如下所示:

folder=DocsList.createFolder("MyFolder");
var file=DocsList.createFile(blob);
file.addToFolder(folder);
file.removeFromFolder(DocsList.getRootFolder());

这样做的问题是,如果您打开 Drive,您会看到文件首先放在根文件夹中,然后移动到 MyFolder。所以在removeFromFolder的执行之前会有一点延迟。

【问题讨论】:

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


    【解决方案1】:

    刚刚测试了以下代码

    function Test() {
      DocsList.createFolder('Folder1').createFolder('Subfolder1').createFile('File1', 'Empty');
    }
    

    它按预期工作,即在新创建的文件夹My Drive\Folder1\Subfolder1 中创建了一个新的File1 文档。

    【讨论】:

    • 相关问题@megabyte1024,如果文件夹已经存在,我可以用 .getFolderById(id) 替换 .createFolder(name) 吗?你试过了吗?
    • 刚刚做到了。一切正常。 function Test2() { var id = DocsList.createFolder('Folder2').getId(); DocsList.getFolderById(id).createFile('File2', 'Empty'); }
    【解决方案2】:

    DocsList 不再有效,已被 DriveAPI、Google App Services 和 Advanced Google services 取代。

    这里我留下我的测试代码,这段代码创建文件夹-子文件夹-google文件-pdf-并以各种方式将它们存储在文件夹和子文件夹中,希望对您有所帮助

    function Drive_2015() {   //busca un folder, si no lo hay lo crea y crea 2 sub carpetas un google document copiado en cada una de ellas
      var name='folder de prueba';
      var carpeta = DriveApp.getRootFolder().searchFolders("title contains '"+name+"'");
      if (carpeta.hasNext()===true) {    
          while (carpeta.hasNext()) {
          var folder = carpeta.next();
          Logger.log(folder.getName()+' '+folder.getId());
          }
      }else{
        var folder=DriveApp.getRootFolder().createFolder(name);
    
        var parent=DriveApp.getFolderById(folder.getId());   // get parent folder
        var folder2 =parent.createFolder('Subfolder');   // 1° way to create sub folder
        var folder3=folder.createFolder(name+1);// 2° way to create sub folder (and more easy)
    
        var doc = DocumentApp.create('Documento sta');
        var sheet = SpreadsheetApp.create('Spreadsheet sta');
        Utilities.sleep(300); // este retardo es para garantizar en el user-side la creacion del nuevo archivo
        var files = DriveApp.getFilesByName('Documento sta');// or Id var file = DriveApp.getFileById(doc.getId());
        while (files.hasNext()) {
          var file = files.next();
          Logger.log('ojo '+file.getName());
          file.makeCopy(folder3);
          file.makeCopy(folder2);
          var file2=file.makeCopy(folder);
          file2.setName('Acta individual del alumno')
          var blob = file2.getAs('application/pdf'); 
          var file2pdf = folder.createFile(blob);
          var file2pdf = DriveApp.getFileById(file2pdf.getId());
          var file2pdf=file2pdf.makeCopy(folder);
          Logger.log('se creó: '+file.getName()+' en la carpeta: '+folder.getName()+' el PDF es: '+file2pdf.getId());
          DriveApp.getFileById(file2pdf.getId()).setTrashed(true)
          DriveApp.getFileById(docid).setTrashed(true)
          }
      }
    }
    

    【讨论】:

      【解决方案3】:

      从 2015 年起,您应该使用 DriveApp 服务来管理 Google Drive 中的文件。 DriveApp 有一个 Folder 类,允许您直接在文件夹中创建文件。

      function createFilesInFolder() {
        //This creates the folder
        var folder = DriveApp.createFolder('My Folder');
        //This creates a file in the folder
        var file = folder.createFile('My File.txt', 
                                     'Lorem ipsum', 
                                     MimeType.PLAIN_TEXT);
      }
      

      【讨论】:

      • 如何指定演示文稿的内容。该文件必须存在才能添加幻灯片?你可以创建空文件类型吗?我试过 , 没有任何内容,而 , '' 是空的,但都没有用。
      【解决方案4】:

      我只是想发表评论(但没有 50 点声望)。

      上面的答案在原始帖子不起作用时起作用的原因是 .createFolder 适用于 DocsList.createFolder (在根目录中创建文件夹)和 Folder.createFolder 在当前创建子文件夹文件夹。

      这对除了我之外的每个人来说都是显而易见的——但我花了很长时间才意识到:-)

      【讨论】:

      • 你可以考虑把它变成一个真实的、完整的、独立的答案而不是评论。
      【解决方案5】:

      GAS 现在允许使用 .moveTo 更快地移动文件 假设您想要构建一个可以编辑的文档。此代码允许您创建文件夹、创建文档、移动文档,最后点击 DocumentApp 编辑文件。

      例如:

      const saveTo = DriveApp.createFolder("FolderName").next().getId();
      const newDoc = DocumentApp.create("New Doc"), 
        newDocId = DriveApp.getFileById(newDoc.getId()).moveTo(saveTo);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        • 1970-01-01
        • 2013-08-23
        • 2020-06-05
        相关资源
        最近更新 更多