无法使用getParents拉取父文件夹名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用getParents拉取父文件夹名称相关的知识,希望对你有一定的参考价值。

我试图获取由url确定的电子表格的父文件夹的名称,然后将名称放在指定的单元格中。调试下面的脚本告诉我“TypeError:无法在对象Spreadsheet中找到函数getParents”。我已经尝试了每一个我能想到的调整,并阅读了多篇可能回答我问题的类似文章,但我无法理解它们。 (原谅新手?)有人可以告诉我我做错了什么吗?

function getParent(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("VALUES");
var ll = s.getRange("B11");
var url = ll.getValue();
var driveFile = SpreadsheetApp.openByUrl(url); 
var parentFolder = driveFile.getParents();
while (parentFolder.hasNext()) {
var folder = parentFolder.next();
var title = folder.getName();
}
s.getRange("B5").setValue(title);
}
答案

试试这个:

function getParent(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("VALUES");
  var url=sh.getRange("B11").getValue();
  var file=DriveApp.getFileById(url.split('/')[5]);//gets the id out of the url 
  var parentFolder=file.getParents();
  while (parentFolder.hasNext()) {
    var folder = parentFolder.next();
    var title = folder.getName();
  }
  sh.getRange("B5").setValue(title);
}
另一答案

看起来这个代码有两个小问题,我们将解决这个问题,让你开始运行。

  1. 如果可能,使用文档ID而不是URL通常是更好的做法。此外,由于我不知道的原因,DriveApp没有getFileByURL方法。所以我更改了“fileId”的“url”变量,并将单元格B11的内容更改为文件的Id,这是URL本身的一部分。
  2. 要返回驱动器文件,您应该在电子表格本身上调用getFileByID(),而不是在DriveApp服务上调用。

我已经测试了以下代码,我相信它符合您的期望:

function getParent(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName("VALUES");
  var ll = s.getRange("B11");
  var fileId = ll.getValue();
  var driveFile = DriveApp.getFileById(fileId);
  var parentFolder = driveFile.getParents();
  while (parentFolder.hasNext()) {
    var folder = parentFolder.next();
    var title = folder.getName();
  }
  s.getRange("B5").setValue(title);
}

以上是关于无法使用getParents拉取父文件夹名称的主要内容,如果未能解决你的问题,请参考以下文章

通过取父级for循环的i来理解闭包,iife,匿名函数

android获取应用安装之后的路径

拉取github指定分支上的代码

手把手教你使用nodejs编写cli(命令行)——拉取远程仓库作为代码模板

新拉取的代码无法加载到的问题

docker镜像拉取失败