列出电子表格中某个文件夹中最近添加的每个文件?

时间:2014-07-07 16:56:00

标签: javascript google-apps-script

长时间读者,第一次发帖...

我尝试创建一个脚本,列出电子表格中某个文件夹中最近添加的每个文件。该脚本正常工作,直到我开始包含子文件夹,但我需要遍历所有子文件夹中的每个文件。当包含子文件夹时,我得到" 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)
}

提前致谢!

0 个答案:

没有答案