【问题标题】:Google App Script File Moving files uploaded to multiple foldersGoogle App Script File 移动上传到多个文件夹的文件
【发布时间】:2021-07-08 06:24:17
【问题描述】:

我正在尝试使用 Google 表单将文件上传到驱动器中的多个文件夹。用户可以选择超过 1 个目的地(复选框分析器)并上传 1 到 5 个文件。我有什么:

包含已上传文件的响应/文件夹。

用户希望将文件发送到哪个文件夹(1 到 47 个文件夹)的响应

我将不胜感激任何帮助解决和学习,我在网上使用的所有代码。

    const FoldeRespnseID=''
    const MainFolder=''
    
    function onFormSubmit(e) {
      const form = FormApp.getActiveForm();
      const formResponses = form.getResponses();
      const itemResponses = formResponses[formResponses.length - 1].getItemResponses();
      rename();

    // Loads the checkboxes values in an array
      for (var i = 0; i < itemResponses.length; i++) {
        var itemResponse = itemResponses[i];
        if (itemResponse.getItem().getType() == FormApp.ItemType.CHECKBOX) {
       var  multiple = itemResponse.getResponse();
          Logger.log(multiple[i]);
        }
      }
      var righe = multiple.length - 1;
      for (i = 0; i <= righe; i++) {
        var x = multiple[i];
        movetofolders2(x);
         }
                
    }
    
    
function movetofolders2(folderName) // foldername is where I want to move the files
{ 

    var Files = DriveApp.getFolderById(FoldeRespnseID).getFiles();
      var Folder = DriveApp.getFolderById(MainFolder).getFolders();
     while (Files.hasNext()) {
        var file = Files.next();
      while(Folder.hasNext()) {
        var child = Folder.next();
        var FName=child.getName();
        if (folderName===FName)
        {
        var sId =child.getId()
        var sdestFolder = DriveApp.getFolderById(sId);
        // Move files to the folder.
        var UfileName = file.getName().toString();
        var driveFile =   DriveApp.getFileById(file.getId());
        driveFile.makeCopy(UfileName,sdestFolder);
    }
   }
  }

}

【问题讨论】:

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


    【解决方案1】:

    我不太了解您的代码,但一种方法是创建一个installable trigger,在提交表单时执行一个函数。 然后,此函数将收到带有提交答案的event,然后您可以get 用户选择的文件夹以及上传文件的 ID。

    获得上传的文件和目标文件夹后,您可以使用makeCopy() 复制它。

    基于上述,实现它的一种方法是:

    function onSubmit(event) {
      const mainFolder = DriveApp.getFolderById('ABC123');
      const folderChoiceQuestionIndex = 0;
      const fileUploadQuestionIndex = 1;
    
      // Get submitted responses
      const responses = event.response.getItemResponses();
    
      // Get uploaded file based on its ID
      const uploadedFile = DriveApp.getFileById(responses[fileUploadQuestionIndex].getResponse());
    
      // Copy the uploaded file to the destination folders 
      const destinationFoldersNames = responses[folderChoiceQuestionIndex].getResponse();
      for (const destinationFolderName of destinationFoldersNames) {
        const destinationFolder = mainFolder.getFoldersByName(destinationFolderName).next();
        uploadedFile.makeCopy(destinationFolder);
      }
    }
    

    如果您想移动多个文件,您可能需要包含一个循环来遍历与它们对应的所有问题。

    【讨论】:

    • 感谢您的支持。
    【解决方案2】:

    感谢您的支持: 我的意图是通过 GOOGLE FORM 上传 1 到 5 个文件,然后将文件移动到用户(复选框)选择的子文件夹(1 到 47)中,然后从主文件夹和上传文件夹中删除上传的文件。 已解决:

    const FFolderUploadsID='Put the ID of the upload file folder';
    const MainFolder='Put the ID of the main folder' //where i have the 47 subfolders;
    
    function onFormSubmit(e) {
      const form = FormApp.getActiveForm();
      const formResponses = form.getResponses();
      const itemResponses = formResponses[formResponses.length - 1].getItemResponses();
      rename();// rename the files uploaded with the '- Username'
    // Loads the checkboxes values 
      for (var i = 0; i < itemResponses.length; i++) {
        var itemResponse = itemResponses[i];
        if (itemResponse.getItem().getType() == FormApp.ItemType.CHECKBOX) {
       var  multiple = itemResponse.getResponse();
        }
      }
      var righe = multiple.length - 1;
      for (i = 0; i <= righe; i++) {
        var x = multiple[i];
        movetofolders2(x);
         }
         
         emptyFolder();
    }
    
    function emptyFolder()
    { var Ffiles = DriveApp.getFolderById(FFolderUploadsID).getFiles();
      while (Ffiles.hasNext()) {
      var files = Ffiles.next();
      files.setTrashed(true);
      }
    }
    
    
    function rename() {
      var Ffiles = DriveApp.getFolderById(FFolderUploadsID).getFiles();
      while (Ffiles.hasNext()) {
      var files = Ffiles.next();
      oldfilename=files.getName();
      var indexOldFileName = oldfilename.indexOf("-")-1;
      var newFileName = oldfilename.slice(0, indexOldFileName);
      var indexOldFileExt = oldfilename.lastIndexOf(".");
      var newFileExt = oldfilename.slice(indexOldFileExt);
      var modName = newFileName + newFileExt.split(" ").join("");
      //modName = modName.split(" ").join("");
      files.setName(modName);
      TrashFiles(modName);
       }
      
    }
    
    
    
    function TrashFiles(modName) {
      var files = DriveApp.getRootFolder().getFiles();
      while (files.hasNext()) {
        var file = files.next();
        var fileName = file.getName();
        if (fileName.includes(modName)) {
          file.setTrashed(true)
        }
      }
    }
    
    
    function movetofolders2(folderName) // foldername is where i want to move the files
    { var Files = DriveApp.getFolderById(FFolderUploadsID).getFiles();
      var Folder = DriveApp.getFolderById(MainFolder).getFolders();
     var fatto=false;
      while(Folder.hasNext() && fatto===false) {
        var child = Folder.next();
        var FName=child.getName();
        if (folderName===FName)
        {
          var sId =child.getId()
          var sdestFolder = DriveApp.getFolderById(sId);
          // Move files to the folder.
          while (Files.hasNext()) {
          var file = Files.next();
    
         var UfileName = file.getName().toString();
         var driveFile =   DriveApp.getFileById(file.getId());
         driveFile.makeCopy(UfileName,sdestFolder);
         fatto=true;
        }
       }
      }
    }
    

    【讨论】:

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