长时间读者,第一次发帖...
我尝试创建一个脚本,列出电子表格中某个文件夹中最近添加的每个文件。该脚本正常工作,直到我开始包含子文件夹,但我需要遍历所有子文件夹中的每个文件。当包含子文件夹时,我得到" Service调用了太多次"错误。
任何有关让脚本工作,更有效地工作,甚至使用完全不同的方法完成整体目标的提示都将不胜感激!
这是脚本:
function ClientFileMonitor() {
var data = [];
var ClientFolders = DocsList.getFolderById('XXXXX');
var files = ClientFolders.getFiles();
//Utilities.sleep(1000);
var folders = ClientFolders.getFolders();
//Utilities.sleep(1000);
for (var r in folders) {
var cFiles = DocsList.getFolderById(folders[r].getId()).getFiles();
files.push.apply(files, cFiles);
var sFolders = DocsList.getFolderById(folders[r].getId()).getFolders();
//Utilities.sleep(1000);
for (var s in sFolders) {
var sFiles = DocsList.getFolderById(sFolders[s].getId()).getFiles();
files.push.apply(files, sFiles);
//var qFolders = DocsList.getFolderById(sFolders[s].getId()).getFolders();
//Utilities.sleep(1000);
//for (var q in qFolders) {
//var qFiles = DocsList.getFolderById(qFolders[q].getId()).getFiles();
//files.push.apply(files, qFiles);
//var hFolders = DocsList.getFolderById(qFolders[q].getId()).getFolders();
//Utilities.sleep(1000);
//for (var h in hFolders) {
// var hFiles = DocsList.getFolderById(hFolders[h].getId()).getFiles();
// files.push.apply(files, hFiles);
//};
//};
};
};
for (var i in files) {
var todayDate = new Date();
var ageLimit = 8;
/*** Created/Last Updated field ***/
var fileUpdatedDate = new Date(files[i].getLastUpdated());
var fileCreatedDate = new Date(files[i].getDateCreated());
if (fileUpdatedDate > fileCreatedDate) {
var days = daysDiff(todayDate, fileUpdatedDate);
var lastUpdated = Utilities.formatDate(files[i].getLastUpdated(), 'America/Chicago', 'yyyy-MM-dd hh:mm a');
} else {
var days = daysDiff(todayDate, fileCreatedDate);
var lastUpdated = Utilities.formatDate(files[i].getDateCreated(), 'America/Chicago', 'yyyy-MM-dd hh:mm a');
}
var fileType = files[i].getName().substring(files[i].getName().lastIndexOf('.')).toLowerCase();
// collect additional info for recent files, exclude hyperlinks
if (days < ageLimit && fileType != ".url") {
/*** Title field ***/
var title = files[i].getName();
/*** Link field ***/
var link = files[i].getUrl();
/*** Type field ***/
var type = files[i].getType();
if (!type || type == "other" || type == "blob_item") {
var type = files[i].getName().substring(files[i].getName().lastIndexOf('.')).toLowerCase();
}
/*** Size field ***/
var size = files[i].getSize();
if (size > 0) {
var length = size.toString().length;
if (length < 7) {
size = size.toString().substring(0,length - 3) + 'kb';
} else {
size = size.toString().substring(0,length - 6) + 'mb';
}
} else {
size = '0 kb';
}
if (size == 'kb') {
size = '0 kb';
}
data[i] = [lastUpdated,title,size,type,link];
}
}
// remove empty strings from the array
var newFiles = data.filter(Boolean);
var numFiles = newFiles.length;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = SpreadsheetApp.getActiveSheet().getSheetName();
var sheet = ss.getSheetByName(sheetname);
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
var dataRange = sheet.getRange((lastRow + 1), 1, numFiles, 5);
var values = dataRange.getValues();
for (var k = 0;k < numFiles;++k) {
values[k][0] = newFiles[k][0];
values[k][1] = newFiles[k][1];
values[k][2] = newFiles[k][2];
values[k][3] = newFiles[k][3];
values[k][4] = newFiles[k][4];
}
dataRange.setValues(values);
var rangeRef = 'A2:' + 'E' + SpreadsheetApp.getActiveSheet().getLastRow();
var range = sheet.getRange(rangeRef);
range.sort(1);
}
function daysDiff(date1, date2) {
var ONE_DAY = 1000 * 60 * 60 * 24
var date1_ms = date1.getTime()
var date2_ms = date2.getTime()
return Math.round((date1_ms-date2_ms)/ONE_DAY)
}
提前致谢!