如何解决谷歌应用程序脚本中超出最大执行时间错误
我正在尝试在谷歌应用程序脚本中运行此脚本。它将文件夹中的所有文件及其大小、名称、url 等递归地列出到电子表格中。脚本没有任何问题,但问题是我在一个包含数千个文件的文件夹上运行它,而谷歌脚本只允许几分钟的最大运行时间,所以每次几分钟后我都会收到错误消息,说超出了最大执行时间谷歌脚本。
是否有解决此问题的方法?如果这是唯一的出路,即使我必须在 google 应用程序脚本之外的某个地方运行此代码,我也很好,但我再次被告知无法在 google 脚本之外执行此代码。
function start() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Name","Date","Size","URL","Download","Description","Type","Folder","Folder Slug"]);
var folders = DriveApp.getFolderById('FOLDER_ID');
var folder = folders.getFolders();
if (folder.hasNext()) {
// 1. Retrieve the file list and put to an array.
// 2. Sort the array by the file size.
var list = processFolder(folder).sort((a,b) => a[2] < b[2] ? 1 : -1);
// 3. Put the array to the Spreadsheet.
sheet.getRange(2,1,list.length,list[0].length).setValues(list);
} else {
Browser.msgBox('Folder not found!');
}
function processFolder(folder,list = []) {
while (folder.hasNext()) {
var f = folder.next();
var contents = f.getFiles();
addFilesToSheet(contents,f,list);
var subFolder = f.getFolders();
processFolder(subFolder,list);
}
return list;
}
function addFilesToSheet(files,folder,list) {
var folderName = folder.getName();
while (files.hasNext()) {
var file = files.next();
list.push([
file.getName(),file.getDateCreated(),Math.round(10 * file.getSize() / 1073741824) / 10,// Modified from file.getSize() / 1073741824,file.getUrl(),"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),file.getDescription() || "",file.getMimeType(),folderName
]);
}
}
}
解决方法
我过去曾使用 Patrick Martinent 的 Continous Execution Library 解决了这个问题:
https://gist.github.com/patt0/8395003
基本思想是:
- 设置您的函数,使其可以毫无问题地终止和恢复
- 设置时间触发器以重新运行函数
- 运行它直到接近执行超时并优雅退出
- 允许触发器重启函数
- 重复直到完成,然后移除触发器
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。