文件夹 getParents 无法在 Google 脚本中获取团队云端硬盘名称

2023-11-29

我正在尝试使用脚本在团队驱动器中构建文档的完整路径。代码如下所示:

var path = [ ]
var folder = id.getParents()
while (folder && folder.hasNext()) {
  var f = folder.next()
  path.unshift(f.getName())
  folder = f.getParents()
}

该脚本绑定到文档以进行测试。

但是,当我到达根目录时,它没有返回团队驱动器的实际名称,例如“会计”或“营销”,而是返回“团队驱动器”。我需要知道实际情况nameTeam Drive 的信息,为什么我没有收到此信息?如果我在绑定到“我的云端硬盘”中的文档的脚本中运行此命令,它会在根目录中显示“我的云端硬盘” - 这至少是有意义的,因为这是我在浏览器中看到的实际名称。在 Team Drive 中,根实际上是“Team Drives”而不是“Team Drive”。


由于团队云端硬盘的实现方式与“常规”Google 云端硬盘“文件夹”不同,因此内置DriveApp不保证处理它们的所有操作都能正常工作。有可能在某个时刻DriveApp将进行更新以完全支持 Team Drives,但 Google 仍有很多明智的事情尚未完成;)

相反,请使用“高级服务”Drive,这是一个实现 Drive REST API 版本 2 的客户端应用程序,并允许正确处理 Team Drive 信息。作为“高级服务”,您must 启用此服务在你可以使用它之前。

要仅使用高级服务构建团队云端硬盘项目的完整路径:

function getTeamDrivePath(fileId) {
  // Declare we know how to handle Team Drive items, and that they be included in responses.
  var params = {
    supportsTeamDrives: true,
    includeTeamDriveItems: true
  };
  // Return only the fields we want, instead of the whole `File` resource.
  params.fields = "id,title,parents/id"

  // In a Team Drive, a file can have only one parent folder (e.g. "normal" filesystems).
  // (parent.isRoot is never true for Team Drive folders so it is not used.)
  var path = [], file;
  do {
    file = Drive.Files.get(fileId, params);
    path.unshift(file.title);
    fileId = file.parents.length ? file.parents[0].id : null;
  } while (fileId);

  // Since we also added the file, the last element of the path array is the filename.
  path.pop();

  // A Team Drive is subject to different permissions than files, and thus its name must be 
  // obtained via the Team Drives resource. Since `file` points to the Team Drive, use it:
  // Requesting incorrect fields will result in an API error, so request the proper ones:
  params.fields = "name"
  var td = Drive.Teamdrives.get(file.id, params);
  path[0] = td.name;
  return path;
}

有关团队驱动器以及与其相关的处理的更多信息,请参阅驱动器 REST API 参考。我链接了 v2 版本,因为它们是通过 Apps 脚本的“高级服务”提供的,但 v3 版本应该用于使用客户端库的第三方应用程序。

重要资源:

  • 关于团队驱动器
  • 启用团队云端硬盘支持
  • 团队驱动 API 参考
  • 在 Apps 脚本中启用“高级服务”
  • API 最佳实践:部分资源和“字段”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件夹 getParents 无法在 Google 脚本中获取团队云端硬盘名称 的相关文章

  • 如何在 Android 上设置 Google Drive API?

    我一直在尝试将 Google Drive 功能集成到我的应用程序中 但我无法使用任何内置功能 因此我相信我要么错过了一个步骤 要么做得不正确 我正在遵循官方的 Google 开发者指南 https developers google com
  • 如何在多个工作表上运行脚本,Google Sheets

    我有一个脚本 想在 Google 工作表中的特定选项卡上运行 但不一定在所有选项卡上运行 我尝试执行两个不同名称的脚本 但只有最后一个保存的脚本会运行 如何编写此脚本以在特定选项卡上运行 这是我的开始脚本 function onEdit v
  • Google Apps 脚本是否允许任何类型的内省?

    Google Apps 脚本可以学习自己的名称吗 或者它的ID 它可以获取其包含文件夹的 ID 吗 它可以了解它在文件夹层次结构中的位置吗 脚本 A 可以获取 设置脚本 B 的属性吗 脚本 A 可以编辑脚本 B 使用的库的任何方面吗 脚本
  • 使用 Google 云端硬盘缩略图的正确方法是什么?

    我首先尝试存储和使用 API 返回的链接 但它会在短时间内过期 然后我尝试在本地下载并存储图像 并从我的服务器提供它 但是当我没有使用我的帐户登录时 缩略图链接会抛出 404 错误 尽管文档是完全公开的 提供 检索文档缩略图的正确方法是什么
  • 将按钮添加到 Google 表格并在单击时为单元格设置值

    我是 Google 脚本的新手 我有一个包含 5 列的 Google 表格 在每一列上我需要一个按钮 带有文本1 2 3 4 5 在每个按钮上单击我需要将按钮文本设置为相应的单元格并隐藏单击的按钮 是否可以 您可以插入看起来像按钮的图像 然
  • 谷歌电子表格中的“MMMM yy”日期

    我有一个谷歌电子表格 其中我想要一个仅包含月份和年份名称的日期 例如September 2011 而且我还希望月份和年份能够轻松更改 有没有办法获得自定义日期格式来做到这一点 我发现我可以这样做 TEXT 40295 MMMM yy 但是日
  • Google Drive SDK:通过域超级管理员访问权限将文件从一个用户复制到另一个用户

    假设我是域超级管理员 并且 有用户 A 源 要复制的文件 和用户 B 目标 要复制到的文件 是否有可用于此功能的 Google Drive SDK API 当我读到这篇文章时 https developers google com driv
  • 如何使用基于时间的触发器每小时运行一个脚本,仅在工作日的整点运行?

    我只需要在工作日每小时运行一个 Google App Script 脚本 两者之一似乎很容易做到 但将其结合起来我不确定 每小时触发 ScriptApp newTrigger RefreshRates timeBased inTimezon
  • 自动递增 ID 号 Google Apps 脚本

    我想在向工作表添加新值时自动增加 ID 我尝试从当前的 ID 列表创建一个列表 但它只计数到 5 因此当自动递增时 它只会到达一个点并为每个输入保存该数字 以下是我尝试获取 ID 号列表的方法 但它没有获取整个列表 我缺少什么 var ss
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

    我正在使用 Google Apps 脚本在 Google 表格中创建提交表单 该表单位于一页上 提交内容被移至第二个隐藏页面 当用户填写表单后 他们按下提交页面上的按钮以激活脚本 我遇到的问题是 当用户填写最后一个单元格然后单击按钮时 输入
  • 如何使用Google脚本获取当前单元格下单元格的值?

    我找不到看起来像这样的选项 var spreadsheet SpreadsheetApp getActive var sheet spreadsheet getActiveSheet sheet getRange sheet getCurr
  • 使用 JavaScript 以编程方式编辑 Google 文档

    我想做的是运行一些 JavaScript 代码 将文本输入到 Google 文档中 到目前为止 我所做的是在我的个人网页上创建一个嵌入 Google 文档的 iframe 元素 目前我想做的是使用 Google 源代码中的函数来输入文本 当
  • 您可以在不是在 Google 协作平台下创建的网站上使用 Google 脚本吗? [复制]

    这个问题在这里已经有答案了 Google 脚本有一种方法可以嵌入到 Google 网站中 但我想知道是否可以在非 Google 托管的网站上使用 Google 脚本 此 google 脚本的目的是作为 Javascript 的简单替代方案
  • 使用 Google Advanced Drive 服务通过 Apps 脚本在文件夹中创建新文件

    创建新文件有四种方法 DocsList 显示为DocsList在主列表中 内置于 Apps 脚本中 DriveApp 显示为Drive在主列表中 内置于 Apps 脚本中 驱动器 API 也显示为Drive在主列表中 必须添加到 Apps
  • 使用 google.script.run 从 html 调用库函数

    我使用 Google App Script 实现库 并且使用 google script run 从库中调用函数时遇到一些困难 这是我的图书馆的代码 Code gs function ShowSideBar var html HtmlSer
  • 谷歌脚本循环性能

    我是 google 脚本的新手 我不确定为什么与 Excel VBA 的简单循环相比 我的性能如此差 我附上了下面的代码 它是一个大约 1200 行的循环 每秒删除大约 2 3 行 我写的脚本效率很低吗 我还不熟悉 Javascript 但
  • 如何隐藏工作表?

    如何使用 googleScript 隐藏电子表格应用程序中的一些工作表 我有一个包含多个工作表的电子表格 我想使用 googlScript 将电子表格缩小为仅第一个可见工作表和所有其他隐藏工作表 sheet hideSheet https
  • 获取 Google Apps 脚本中新创建的文件夹的 ID

    作为 Google Apps 脚本项目的一部分 我尝试将活动电子表格和几个上传的文件移动到在共享目录中创建的新文件夹中 我已经能够使用以下命令创建新文件夹 DriveApp getFolderById parentFolder create
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t

随机推荐