【问题标题】:Google App Script - DriveApp - getParents() not working as expectedGoogle App Script - DriveApp - getParents() 未按预期工作
【发布时间】:2019-10-28 23:17:51
【问题描述】:
我的云端硬盘
|_ 客户
|_ tpl
   |_ 摄入量.doc

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

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

这给了我以下错误:

TypeError:无法调用未定义的方法“getName”。 (第 50 行,文件 “代码”)

同样,尝试遍历父文件夹(客户端和 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] 客户端

我做错了什么?

【问题讨论】:

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


    【解决方案1】:
    • 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的文件夹,我认为Alberto Molina's answer对此很有用。

    参考资料:

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

    【讨论】:

      【解决方案2】:

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

      var rootFolder = DriveApp.getRootFolder();

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-24
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多