尝试在 Google Apps 脚本中获取文件的文件夹路径
Trying to get folder path of file in Google Apps Script
我正在尝试在 Google Apps 脚本中创建一个函数来查找文件夹的文件路径。
这是错误:TypeError: Cannot read 属性 'appendParagraph' of null (line 20, file "Code")
'''
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);
}
'''
我相信你的目标如下。
- 您想知道
TypeError: Cannot read property 'appendParagraph' of null
. 的错误信息的原因
- 您想删除错误。
- 您想检索活动 Google 文档的文件夹路径。
为此,这个答案怎么样?
修改点:
- 在您的脚本中,我认为您的错误消息的原因是 header 不存在于 Google 文档中。这样,
getHeader()
得到的header
就是null
,然后就报错了。所以在这种情况下,请使用 addHeader()
. 添加 header
doc
of var doc = DocumentApp.getActiveDocument();
可用于 getHeader()
.
- 如果你想从根文件夹中检索文件夹路径,我认为你的脚本需要修改。在您当前的脚本中,当 Google 文档放入嵌套文件夹时,仅检索 parent 的文档。
当您的脚本使用以上几点进行修改后,将变成如下。
修改后的脚本:
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);
}
- 通过此修改,当header存在时,使用
doc.getHeader()
。当 header 不存在时,使用 doc.addHeader()
。并且,当活动文档被放入 root -> folder1 -> folder2
等文件夹路径时,Master Folder//MyDrive//folder1//folder2
被放入 header.
参考文献:
我正在尝试在 Google Apps 脚本中创建一个函数来查找文件夹的文件路径。 这是错误:TypeError: Cannot read 属性 'appendParagraph' of null (line 20, file "Code")
'''
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);
}
'''
我相信你的目标如下。
- 您想知道
TypeError: Cannot read property 'appendParagraph' of null
. 的错误信息的原因
- 您想删除错误。
- 您想检索活动 Google 文档的文件夹路径。
为此,这个答案怎么样?
修改点:
- 在您的脚本中,我认为您的错误消息的原因是 header 不存在于 Google 文档中。这样,
getHeader()
得到的header
就是null
,然后就报错了。所以在这种情况下,请使用addHeader()
. 添加 header
doc
ofvar doc = DocumentApp.getActiveDocument();
可用于getHeader()
.- 如果你想从根文件夹中检索文件夹路径,我认为你的脚本需要修改。在您当前的脚本中,当 Google 文档放入嵌套文件夹时,仅检索 parent 的文档。
当您的脚本使用以上几点进行修改后,将变成如下。
修改后的脚本:
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);
}
- 通过此修改,当header存在时,使用
doc.getHeader()
。当 header 不存在时,使用doc.addHeader()
。并且,当活动文档被放入root -> folder1 -> folder2
等文件夹路径时,Master Folder//MyDrive//folder1//folder2
被放入 header.