Google App脚本-DriveApp-getParents()不能按预期工作

时间:2019-06-14 10:19:00

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

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:无法调用未定义的方法“ getName”。 (第50行,文件   “代码”)

类似地,由于某些原因,尝试遍历父文件夹(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]客户端

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

  • MyDriveClienttpl是文件夹。
  • intake.doc是一个文件。
  • 您要使用Client的父文件夹在tpl下检索MyDriveintake.doc的文件夹。
  • 您想知道第二个脚本运行时仅检索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的文件夹,我认为Alberto Molina's answer对于这个。

参考文献:

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

答案 1 :(得分:0)

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

var rootFolder = DriveApp.getRootFolder();

,它将返回文件夹对象,就像您通过ID搜索文件夹一样。以下是有关DriveApp类的更多文档,可以帮助您解决任何其他疑问。

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