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

坚不可摧的弧

对于我正在从事的项目,我创建了一个触发器,以便在每年年初运行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,以便可以将电子表格的副本复制到该文件夹​​。

来吧

您会收到该特定错误,Cannot retrieve the next object: iterator has reached the end.因为搜索该文件夹名称会产生一个空结果集。如果将程序结构更改为仅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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Google驱动器上创建一个文件夹(如果不存在),然后使用Python脚本将文件上传到该文件夹

Google Team Drive使用Apps脚本在团队驱动器文件夹之间移动文件

使用Xamarin.Android将文件上传到Google驱动器文件夹

文件夹getParents无法在Google脚本中获取团队驱动器名称

使用REST API在Google驱动器中创建新文件夹

Google表格脚本-从驱动器文件夹加载文件

使用Microsoft Graph API获取驱动器的所有SharePoint文件和文件夹

如何通过文件夹名称或文件夹ID获取Google驱动器文件?

使用api rest在Google驱动器中的创建文件夹期间未定义file.id

使用python API在Google驱动器中显示子文件夹

Google Apps脚本根据文件名将我的驱动器文件移动到Team驱动器文件夹

如何从谷歌驱动器获取文件夹列表?

确定文件夹ID是共享驱动器文件夹还是简单驱动器文件夹

如何使用python在共享的Google驱动器中上传子文件夹?

如何在Python中使用Google API v3使驱动器文件夹“对网络公开”?

从网址中提取Google驱动器文件夹ID

如何防止文件从Google驱动器文件夹的根同步

使用vbscript从本地驱动器获取文件夹列表

如何使用Linux计算驱动器中的文件夹数量?

如何使用CMD将可移动驱动器的内容移动到同一驱动器上的文件夹?

如何使用Google App脚本在Google驱动器中的特定文件夹中生成Google电子表格的JSON?

如何获取谷歌驱动器文件夹路径

谷歌脚本:通过从工作表范围获取文件夹 ID 列出谷歌驱动器中的文件

共享驱动器/文件夹

如何使用c#在谷歌驱动器中创建文件夹而不重复?

如何使用python从驱动器中的文件夹中检索文件?

如何在python中使用pydrive在谷歌驱动器中查找子文件夹ID

如何使用python脚本在谷歌驱动器中创建和显示文件夹?

使用文件夹 ID 删除谷歌驱动器中的文件夹