【问题标题】:Google Apps Script moving file to Team Drive folderGoogle Apps 脚本将文件移动到团队云端硬盘文件夹
【发布时间】:2020-02-21 00:17:09
【问题描述】:

背景: 问题的核心是我有一项 Alteryx 工作将文件放入我的谷歌驱动器。实际上,这些文件需要在 Team Drive 文件夹中。尽我所能,我没有找到让 Alteryx 做到这一点的方法。所以需要这个脚本。

实际问题: 所以这里是标准:我创建的文件使用相同的命名约定,只有日期发生变化。我需要将这些文件从我的驱动器转移到最终处理它们的团队驱动器。 使用堆栈上已有的资源,我在这里找到了很好的解决方案:1 和这里 2,我能够拼凑出一个工作脚本。

了解我是一个用于数据分析的功能稍差的 Python 程序员。 所以我的 JS 和 Google 脚本充其量只是初级。我第一次测试脚本时,它起作用了。奇妙的是,直到它没有。 它毫无问题地移动了我的第一个文件。然后,我在驱动器中创建了相同文件的几个副本,以查看它如何处理多个副本。我现在收到一个错误:

例外:找不到具有给定 ID 的项目,或者您没有找到 有权访问它。 (第 15 行,文件“CodeA1”)

这是我的代码:

function SearchFiles() {
  //searches based on naming criteria 
  var searchFor ='title contains "Reference Data Performance"'; //test file
  var names =[];
  var fileIds=[];
  var files = DriveApp.searchFiles(searchFor);
  while (files.hasNext()) {
    var file = files.next();
    var fileId = file.getId();// To get FileId of the file
    fileIds.push(fileId);
    var name = file.getName();
    names.push(name); 

  }
var file = DriveApp.getFileById(fileIds);
supportsTeamDrives: true;
        supportTeamDrives: true;
        var targetFolder = DriveApp.getFolderById('TEAMDriveID');
        targetFolder.addFile(file);

}

【问题讨论】:

  • .getFileById() 似乎不支持数组,不妨尝试循环遍历它们。
  • 可能是这样,但即使驱动器中只有一个文件,我也会遇到同样的错误。所以它工作了一次,现在我不能让它再次运行....
  • 我不明白这一行 var file = DriveApp.getFileById(fileIds); 这是一个 getFileById() 但你给了一个 ID 数组。在构建对象的函数的底部也缺少一些东西。我猜你在将代码复制到 SO 时犯了一个错误。

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


【解决方案1】:

例外:找不到具有给定 ID 的项目,或者您没有找到 有权访问它。

此错误最常发生在以下情况中

  • TeamDriveId 不正确
  • 您运行脚本的帐户不是团队驱动器的成员

另请注意:

supportsTeamDrives: true; supportTeamDrives: true;

是参数 对于Drive API,不要与DriveApp混淆

【讨论】:

  • 非常真实!我收到了一封来自我们网络安全部门的电子邮件。本质上,我可以访问所有驱动器,但即使我输入了所有必要的文件以使应用程序能够访问。我再次等待访问权限。第一次工作,虽然我知道它可能比我展示的要流畅得多。
  • 很高兴您找到了原因。如果您的答案适合您,请考虑接受它以提高其他有类似问题的用户的可见度。
【解决方案2】:

更新:

我最终选择了这个脚本的简化版本。我让 Alteryx 以小时为单位安排文件创建(三个不同的文件)。然后在 Google Apps 中触发以在每次 Alteryx 计划删除后立即运行脚本。简单的?是的。不优雅?可能是。整个星期都在运行,文件到达目的地供人们处理。

function SearchFiles() {
  //searches based on naming criteria 
  var searchFor ='title contains "Reference Data Performance"'; //looks for file that matches requirements
   var files = DriveApp.searchFiles(searchFor);
  while (files.hasNext()) {
    var file = files.next();
    var fileId = file.getId();// To get FileId of the file


      var file = DriveApp.getFileById(fileId); //grabs file ready to pass to google drive.
supportsTeamDrives: true;
        supportTeamDrives: true;
        var targetFolder = DriveApp.getFolderById('FOLDERID');
        targetFolder.addFile(file);//good for getting a single file needs loop to grab multiple from Array

  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2019-02-28
    • 2018-06-21
    相关资源
    最近更新 更多