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

时间:2019-04-26 18:58:24

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

我正在尝试获取由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);
}

2 个答案:

答案 0 :(得分:2)

此代码似乎有两个小问题,我们将修复这些小问题以使您起步并运行它。

  1. 如果可能的话,通常最好使用文档 ID,而不是URL。另外,由于我不知道的原因,DriveApp 没有getFileByURL方法。因此,我将您的“ url”变量更改为“ fileId”,并将单元格B11的内容更改为文件ID,这是URL本身的一部分。

  2. 为了返回驱动器文件,您不应在电子表格本身上而是在DriveApp服务上调用getFileByID()。

我已经测试了以下代码,并且相信它可以满足您的期望:

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);
}

答案 1 :(得分:0)

尝试一下:

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);
}