首页 > 解决方案 > 尝试在 Google Apps 脚本中获取文件的文件夹路径

问题描述

我正在尝试在 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);


}
'''

标签: javascriptgoogle-apps-scriptgoogle-drive-apigoogle-docs

解决方案


我相信你的目标如下。

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

为此,这个答案怎么样?

修改点:

  • 在您的脚本中,我认为您的错误消息的原因是标题在 Google 文档中不存在。这样,由isheader检索,然后发生错误。所以在这种情况下,请使用.getHeader()nulladdHeader()
  • docofvar doc = DocumentApp.getActiveDocument();可用于getHeader().
  • 如果要从根文件夹中检索文件夹路径,我认为需要修改您的脚本。在您当前的脚本中,当 Google Document 放入嵌套文件夹时,只会检索 Document 的父级。

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

修改后的脚本:

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 -> folder1 -> folder2,Master Folder//MyDrive//folder1//folder2被放入标题。

参考:


推荐阅读