Google apps script 如何使用google脚本获取驱动器中文件夹的文件夹ID?
对于我正在进行的一个项目,我在每年年初创建了一个触发器来运行makeCopy()函数。目标是制作电子表格的副本,并将其保存在驱动器中已创建的文件夹中。在这个函数中,我还为新年创建了一个新文件夹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
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();