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

问题描述 投票:0回答:2

我试图获取由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);
}
google-apps-script google-sheets google-drive-sdk
2个回答
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);
}

2
投票

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

  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);
}
© www.soinside.com 2019 - 2024. All rights reserved.