【问题标题】:Trying to get folder path of file in Google Apps Script尝试在 Google Apps 脚本中获取文件的文件夹路径
【发布时间】:2020-06-14 19:27:45
【问题描述】:

我正在尝试在 Google Apps 脚本中创建一个函数来查找文件夹的文件路径。 这是错误:TypeError:无法读取 null 的属性“appendParagraph”(第 20 行,文件“代码”)

'''
function getRoot() {

  var doc = DocumentApp.getActiveDocument();
  var header = DocumentApp.getActiveDocument().getHeader();
  var name = doc.getName();
  var id = doc.getId();
  var txt = "Master Folder";
  var parents = [];
  var folders = DriveApp.getFileById(id).getParents();
  while (folders.hasNext()){
    var parent = folders.next();
    var n = parent.getName();
    parents.push(n);
  }
  var pLen = parents.length;
  for (i = 0; i < pLen; i++){
    txt = txt + "//" + parents[i];
  }

  var headerPar = header.appendParagraph(txt);


}
'''

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标如下。

    • 你想知道TypeError: Cannot read property 'appendParagraph' of null的错误信息的原因。
    • 您想删除错误。
    • 您想要检索活动 Google 文档的文件夹路径。

    对于这个,这个答案怎么样?

    修改点:

    • 在您的脚本中,我认为您的错误消息的原因是标题在 Google 文档中不存在。这样,getHeader() 检索到的header 就是null,然后出现错误。所以在这种情况下,请使用addHeader()添加标题。
    • var doc = DocumentApp.getActiveDocument(); 中的doc 可用于getHeader()
    • 如果你想从根文件夹中检索文件夹路径,我认为你的脚本需要修改。在您当前的脚本中,当 Google 文档放入嵌套文件夹时,只会检索文档的父级。

    当你的脚本使用以上几点修改后,它变成如下。

    修改脚本:

    function getRoot() {
      var doc = DocumentApp.getActiveDocument();
    
      var header = doc.getHeader() || doc.addHeader();  // Modified
    
      var name = doc.getName();
      var id = doc.getId();
      var txt = "Master Folder";
      var parents = [];
      var folders = DriveApp.getFileById(id).getParents();
    
      // --- I modified below script
      while (folders.hasNext()) {
        var folder = folders.next();
        parents.push(folder.getName());
        folders = folder.getParents();
      }
      parents = parents.reverse();
      // ---
    
      var pLen = parents.length;
      for (i = 0; i < pLen; i++){
        txt = txt + "//" + parents[i];
      }
      var headerPar = header.appendParagraph(txt);
    }
    
    • 通过此修改,当标头存在时,使用doc.getHeader()。当标头不存在时,使用doc.addHeader()。并且,当将活动文档放入文件夹路径(如root -&gt; folder1 -&gt; folder2)时,Master Folder//MyDrive//folder1//folder2 将放入标题中。

    参考资料:

    【讨论】:

    • 好的,谢谢!你回答得很完美。我应该更具体地回答我的问题。再次感谢您!
    • @Terence Hirsch 欢迎您。谢谢你让我知道。我很高兴你的问题得到了解决。如果您的问题已解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • 如果你使用unshift(folder.getName())而不是push,你就不需要reverse
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多