Google 应用脚本 - DriveApp - getParents() 未按预期工作

Google App Script - DriveApp - getParents() not working as expected

MyDrive
|_ Client
|_ tpl
   |_ intake.doc

我正在尝试获取对 MyDrive 文件夹的引用。

  var tpl_intakeDoc = DriveApp.getFileById(docIDs.tpl_intake);
  var parent = tpl_intakeDoc.getParents()[0];
  Logger.log(parent.getName());

这给了我以下错误:

TypeError: Cannot call method "getName" of undefined. (line 50, file "Code")

同样,尝试遍历父文件夹(Client 和 tpl)时出于某种原因只显示 tpl。

  var parents = tpl_intakeDoc.getParents();
  while (parents.hasNext()) {
    var parents = parents.next();
    Logger.log(folder.getName());
  }

所有记录的是:

[19-06-14 04:14:11:764 MDT] tpl

我希望看到类似内容的地方:

[19-06-14 04:14:11:764 MDT] tpl

[19-06-14 04:14:11:764 MDT] Client

我做错了什么?

要获取对“MyDrive”文件夹(驱动器的根目录)的引用,您可以使用函数

var rootFolder = DriveApp.getRootFolder();

这将 return 一个文件夹对象,就像您按 ID 搜索文件夹一样。以下是有关 DriveApp class 的更多文档,这将帮助您解决任何其他疑问。

文档 URL:https://developers.google.com/apps-script/reference/drive/drive-app#getrootfolder

  • MyDriveClienttpl 是文件夹。
  • intake.doc 是一个文件。
  • 您想使用 intake.doc 的父文件夹检索 MyDrive 下的 Clienttpl 的文件夹。
  • 您想知道当您的第二个脚本是 运行 时,只检索到 tpl 的原因。

如果我的理解是正确的,这个答案怎么样?在这个答案中,你的第二个脚本被修改了。

修改点:

  • 在你问题的第二个脚本中,我认为当脚本是 运行 时会发生错误。所以请修改如下。

    var tpl_intakeDoc = DriveApp.getFileById(docIDs.tpl_intake); // Added
    var parents = tpl_intakeDoc.getParents();
    while (parents.hasNext()) {
      var parent = parents.next(); // Modified
      Logger.log(parent.getName()); // Modified
    }
    
  • 在上面的脚本中,检索了 intake.doc 的父文件夹。所以只返回tpl

  • 为了检索 Clienttpl 的文件夹,需要检索 tpl 的父文件夹。并检索 tpl.
  • 父文件夹下的文件夹

这个脚本的流程如下。

  1. 检索 intake.doc 的父文件夹。
    • tpl 被检索到。
  2. 检索 tpl 的父文件夹。
    • MyDrive 被检索到。
  3. 检索 MyDrive 下的文件夹。
      检索到
    • Clienttpl

修改后的脚本:

var tpl_intakeDoc = DriveApp.getFileById(docIDs.tpl_intake);
var parent = tpl_intakeDoc.getParents(); // tpl
if (parent.hasNext()) {
  var parentOnParent = parent.next().getParents(); // MyDrive
  if (parentOnParent.hasNext()) {
    var MyDrive = parentOnParent.next().getFolders();
    while (MyDrive.hasNext()) {
      var folder = MyDrive.next();
      Logger.log(folder.getName()) // tpl, Client
    }
  }
}

注:

  • 如果MyDrive是根文件夹,如果要从根文件夹中取出tplClient的文件夹,我认为是对此很有用。

参考文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。