如何在Apps Script上超过30分钟的时间



我正在电子表格上拉文件列表,一些文件夹需要1小时才能获得所有数据。我怎样才能超过我的时间限制来获取所有的数据?当前限制为30分钟。

下面是我的代码:
function myFunction() {

var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Market","Folder","Employee","FileName", "Date Last Updated", "Size", "URL", "ID", "Description", "Type"]);

var folders = DriveApp.getFoldersByName('Root Folder 1');
var foldersnext = folders.next();
var subfolders = foldersnext.getFolders();

while (subfolders.hasNext()) {
var subfolderdata = [];
var mysubfolders = subfolders.next();
var files = mysubfolders.searchFolders("title contains 'Cap'");
var getfilez = files.next();
var mysubfiles = getfilez.getFiles();

while (mysubfiles.hasNext()) {
var smyfile = mysubfiles.next();
var sfname =  smyfile.getName();
var sfdate =  smyfile.getLastUpdated(); 
var sfsize =  smyfile.getSize();
var sfurl =  smyfile.getUrl();
var sfid =  smyfile.getId();
var sfdesc =  smyfile.getDescription();
var sftype =  smyfile.getMimeType();
subfolderdata = [ 
(foldersnext),
(getfilez),(mysubfolders),
sfname,
sfdate,
sfsize,
sfurl,
sfid,
sfdesc,
sftype
];

sheet.appendRow(subfolderdata); }}}

把所有东西放在一个地方:

通过使用appendRow(),您将为每一行击中表单。这是缓慢和低效的。参见最佳实践。

相反,创建一个subfolderdata数组,并在收集完所有数据后将其发布到工作表。看看这是否能帮助脚本在30分钟内完成。

要实现这一点,在开始处初始化数组:

var postDataArray = [];

然后,对于工作表的标题行,而不是:

sheet.appendRow(["Market","Folder","Employee","FileName", "Date Last Updated", "Size", "URL", "ID", "Description", "Type"]);

添加标题行到数组:

postDataArray.push(["Market","Folder","Employee","FileName", "Date Last Updated", "Size", "URL", "ID", "Description", "Type"]);

然后在while循环内,而不是

sheet.appendRow(subfolderdata);

使用

postDataArray.push(subfolderdata);

然后在while循环之后,使用以下命令将数据发布到工作表:

sheet.getRange(1, 1, postDataArray.length, postDataArray[0].length).setValues(postDataArray);

postDataArray.length为行数。

postDataArray[0].length为列数。


PS:最好测试几百行代码,而不是等30分钟才发现它坏了。

添加一个计数器,当while到达500时中断循环。

最新更新