我正在电子表格上拉文件列表,一些文件夹需要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时中断循环。