对于我正在从事的项目,我创建了一个触发器,以便在每年年初运行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] 删除。
我来说两句