好久没见了。
这是我第一次涉足DriveApp。
我的目标-获得我的驱动器+子文件夹中所有文档/电子表格的列表。包含电子表格所有者、urls和上次编辑日期(如果可能)的列表。
我已经尝试了一些变体,并且能够获得文件夹中的文件列表,但不是我的驱动器?对我来说可能是个问题。
我目前拥有的脚本是:
function getfiles() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Raw");
var files = DriveApp.getFiles();
var rows = [[ "Owner", "Name", "Link","Last updated"]];
while ( files.hasNext()){
var file = files.next();
try {
var owner = file.getOwner();
var name = file.getName();
var url = '<a href="' + file.getUrl() + '">' + file.getName() + '</a>';
var lup = file.getLastUpdated();
var owners = [];
var names = [];
var urls = [];
var lups = [];
for (var v=0; owner.length;v++){
owners.push(owner[v].getName());
}
for (var i=0; name.length; v++){
names.push(name[i]);
}
for (var k=0; url.length; k++){
urls.push(url[k]);
}
for (var o=0; lup.length; o++){
lups.push(lup[o]);
}
sheet.getRange(1,1,owners.length,owners[0].length).setValues(owners);
sheet.getRange(1,2,names.length,names[0].length).setValues(names);
sheet.getRange(1,3,urls.length,urls[0].length).setValues(urls);
sheet.getRange(1,4,lups.length,lups[0].length).setValues(lups);
} catch (err) {
Logger.log(err);
}
}
}
此脚本超过了最大执行时间。
老实说,我还是个新手。寻找一些指点。如果你能纠正我的错误,并告诉我我是如何/哪里出错的,我将不胜感激。或者,给我指出正确的方向。
欢迎任何建议!
克里斯
发布于 2016-08-25 17:43:43
所以结果是我睡了一觉,一个新的头脑设法为我解决了这个问题。创造奇迹。
这是我的最终结果,经过大约4次修改。
function getAllFiles() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test");
var arr = [["Filename", "Link", "Owner", "Last Edit Date"]];
var f = DriveApp.getFiles()
while (f.hasNext()) {
var file = f.next();
var name = file.getName()
var owner = file.getOwner().getEmail()
var lup = file.getLastUpdated()
arr.push([name, '=HYPERLINK("' + file
.getUrl() + '"; "' + name + '")',owner,lup]);
}
sheet.getRange(1,1, arr.length, arr[0].length).setValues(arr);
}
如果其他任何人有这个特殊的需求/问题,请随时使用它。
克里斯
发布于 2016-08-25 13:24:48
调用sheet.setValues()方法会占用您的执行时间。你为你处理的每个文件调用它四次--这将是一个巨大的开销。相反,您应该在文件循环期间构建一个二维数组,然后在循环之后调用一次setValues()。
所以创建一个数组:
values = [];
然后,在循环中,将电子表格的每一行作为数组本身推送到该数组中。
values.push([owner, filename, url, lastModified]);
然后,在文件循环之后,使用数组对setValues进行一次调用:
sheet.getRange(1, 1, values.length - 1, 4).setValues(values);
根据你有多少个文件,这可能足以节省你的时间,并让脚本完成。如果不是这样,事情就会变得复杂...
https://stackoverflow.com/questions/39130116
复制