folder.getFiles不是触发器中的函数错误



当我在Apps Script中运行函数时,它运行良好,但当我将其添加到触发器中时,此错误总是在第一次运行时发生。

TypeError:folder.getFiles不是函数

这就是代码。我使用此代码获取所有文件夹和子文件夹中的所有文件。

var level=0;
function getFnF(folder) {
var folder= folder || DriveApp.getFolderById('root folder ID');
var ss=SpreadsheetApp.openById('google sheet ID');
var sh=ss.getSheetByName('List');

var files=folder.getFiles();
while(files.hasNext()) {
var file=files.next();
var fileid = file.getId();
var TimeStamp =   Utilities.formatDate(new Date(), "GMT+8", "MMMM dd, yyyy HH:mm:ss")
var filesize = file.getSize()/ 1024 / 1024;
var lastrow = sh.getLastRow();
var filename =file.getName();
sh.appendRow([TimeStamp,lastrow,filename,file.getName(),filesize.toFixed(2),fileid);
Logger.log('Item added in list: ['+ lastrow+"] " + filename);
}
var subfolders=folder.getFolders() 
while(subfolders.hasNext()) {
var subfolder=subfolders.next();
//subfolders only
level++;
getFnF(subfolder);
}
level--;
}

我希望你能帮助我。

When I run my function in apps script its working fine but when I add it in a trigger this error always occurs in first run.,我不确定触发器的类型。但是,当函数由触发器运行时,事件对象会被赋予第一个参数。那么,在这种情况下,下面的修改如何?

修改的脚本:

var level = 0;
function getFnF(e, folder = DriveApp.getFolderById('root folder ID')) {
var ss = SpreadsheetApp.openById('google sheet ID');
var sh = ss.getSheetByName('Sheet1');
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
var fileid = file.getId();
var TimeStamp = Utilities.formatDate(new Date(), "GMT+8", "MMMM dd, yyyy HH:mm:ss")
var filesize = file.getSize() / 1024 / 1024;
var lastrow = sh.getLastRow();
var filename = file.getName();
sh.appendRow([TimeStamp, lastrow, filename, file.getName(), filesize.toFixed(2), fileid]);
Logger.log('Item added in list: [' + lastrow + "] " + filename);
}
var subfolders = folder.getFolders()
while (subfolders.hasNext()) {
var subfolder = subfolders.next();
//subfolders only
level++;
getFnF(e, subfolder);
}
level--;
}
  • 通过此修改,当函数getFnF被触发器触发时,该函数将作为DriveApp.getFolderById('root folder ID')folder的初始值运行。

  • 顺便说一句,当你想从另一个函数而不是触发器运行这个函数时,请将其称为getFnF("dummy", folder)

最新更新