Google apps script 如何使用google脚本获取驱动器中文件夹的文件夹ID?

Google apps script 如何使用google脚本获取驱动器中文件夹的文件夹ID?,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,对于我正在进行的一个项目,我在每年年初创建了一个触发器来运行makeCopy()函数。目标是制作电子表格的副本,并将其保存在驱动器中已创建的文件夹中。在这个函数中,我还为新年创建了一个新文件夹 function makeCopy(){ var sheet = SpreadsheetApp.getActiveSpreadsheet(); var d = new Date(); var year = d.getYear(); var FolderName = "Time Off R

对于我正在进行的一个项目,我在每年年初创建了一个触发器来运行makeCopy()函数。目标是制作电子表格的副本,并将其保存在驱动器中已创建的文件夹中。在这个函数中,我还为新年创建了一个新文件夹

function makeCopy(){

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var d = new Date();
  var year = d.getYear();
  var FolderName = "Time Off Request - " + year;

  DriveApp.createFolder(FolderName);

  year = year - 1;
  var FileName = "Copy of Time Off Request - " + year; 
  Logger.log(FolderName);
  FolderName = "Time Off Request - " + year;
  var FolderID = DriveApp.getFoldersByName(FolderName).next().getId();
  Logger.log(FolderID);

  var destFolder = DriveApp.getFolderById(FolderID);
  Logger.log(destFolder);


  DriveApp.getFileById(sheet.getId()).makeCopy(FileName, destFolder);

}

这段代码实际上是第一次运行和工作的。但是,每次尝试再次测试时,我都会在尝试获取文件夹ID的行上出现错误:“无法检索下一个对象:迭代器已到达终点”。如何修复此错误并获取驱动器中文件夹的文件夹ID,以便将电子表格复制到该文件夹中。

您会收到该特定错误,
无法检索下一个对象:迭代器已到达末尾。
,因为对该文件夹名称的搜索产生了一个空结果集。 如果将程序结构更改为仅使用
next()
如果迭代器的
hasNext()
方法返回true,则将不再出现该错误。然而,这样的改变不会让你的搜索词突然找到结果。但是,它允许对不同的搜索查询进行重复尝试

我建议重命名变量以表达其意图:

// Copy the current file into last year's folder, and create this year's folder.
function makeCopy() {
  var now = new Date();
  var thisYear = now.getYear();
  var lastYear = thisYear - 1;

  var query = "Time Off Request - " + lastYear;
  var folderIterator = DriveApp.getFoldersByName(query);
  // Instead of throwing an error, you could modify this to be a while loop
  // that requests a search term from the user - see Browser/UI and inputBox
  // and updates folderIterator. If you do that, you'll want to add guards
  // that ensure the correct folder will be the first result.
  if (!folderIterator.hasNext()) {
    throw new Error("Bad search term - no folders with name '" + query + "' exist!");
  }

  var lastYearFolder = folderIterator.next();
  console.log({message: "Backup of Time Off Requests",
               query: query,
               destFolder: lastYearFolder.getName()}
  ); // View->Stackdriver Logging

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var backupName = "Copy of Time Off Request - " + lastYear; 
  DriveApp.getFileById(sheet.getId()).makeCopy(backupName, lastYearFolder);

  // Before exiting, now that the backup is done, create this year's folder.
  DriveApp.createFolder("Time Off Request - " + thisYear);
}
返回一个文件夹对象,但代码没有利用它。而不是

DriveApp.createFolder(FolderName);
使用

然后,要获取文件夹id,请使用


您正在记录文件夹名称,然后再定义它。。。名称可能不正确,否则您的代码应该不会出错。您可以使用try/catch结构来防止错误停止执行。我在记录之前在脚本顶部定义了文件夹名称。然后我重新定义了它,因为创建的文件夹有相同的名称,所以年份发生了变化,只是提前了一年,这是唯一的区别。是的,我发现了错误Serge!文件夹名称不正确。
var myFolder =  DriveApp.createFolder(FolderName);
var FolderID = myFolder.getId();