簡體   English   中英

如何通過google-apps-script對google drive文件夾中的最后四個文件進行排序?

[英]How to sort last four files in a google drive folder via google-apps-script?

我在Google雲端硬盤中有一些Google表格。 我正在嘗試僅將最近四個月的Google驅動器中的文件發送到電子郵件。 問題是文件名中定義了月份。 因此沒有時間戳記

到目前為止,我正在按標題包含“ Mar 2019”或標題包含“ Apr 2019”的文件進行搜索。 如果是這樣,我必須在將文件添加到Google驅動器后每月更改代碼。

function checkSales(){

  var file, files = DriveApp.getFolderById("").searchFiles('title 
  contains "Mar 2019" or title contains "Apr 2019" or title contains "May 
  2019" or title contains "Jun 2019"')
  var body = '';
  var subject = [];
  while (files.hasNext()) {
    file = files.next();
    var activeSpreadSheet = SpreadsheetApp.open(file);
    var spreadsheetName = activeSpreadSheet.getName(); // Added
      var sheets = activeSpreadSheet.getSheets();
      for (var sheetIndex = 0; sheetIndex < sheets.length; sheetIndex++) {
        var sheet = sheets[sheetIndex];
        var data = sheet.getDataRange().getValues();
        var resultArr = [];
        for (var i=1;i<data.length;i++) {
          for (var j=11;j<19;j++) {
            var cellVal = data[i][j];
            if (cellVal > 0) {
              resultArr.push([data[i][0],data[0][j],cellVal]);
            }
          }
        }
      }

  }

我希望輸出將Google驅動器中的最后四個文件發送到電子郵件。

  • 您要使用腳本自動創建搜索查詢。
  • 您要使用創建的搜索查詢來搜索文件。
  • 例如,今天是2019年7月,您要創建如下所示的搜索查詢。
    • 'title contains "Mar 2019" or title contains "Apr 2019" or title contains "May 2019" or title contains "Jun 2019"'

如果我的理解是正確的,那么該修改如何? 請認為這是幾個答案之一。

修改要點:

  • 首先,如下創建一個JSON對象。
    • {0: "Jan", 1: "Feb", 2: "Mar", 3: "Apr", 4: "May", 5: "Jun", 6: "Jul", 7: "Aug", 8: "Sep", 9: "Oct", 10: "Nov", 11: "Dec"}
    • 使用該對象和日期對象,創建文件名。

首先,請檢查我准備的上述JSON對象的值。 如果有修改值,請對其進行修改。 如果包含錯誤的值,則無法檢索文件。 請注意這一點。

修改后的腳本:

請進行如下修改。

從:
 var file, files = DriveApp.getFolderById("").searchFiles('title contains "Mar 2019" or title contains "Apr 2019" or title contains "May 2019" or title contains "Jun 2019"') 
至:
 var months = {0: "Jan", 1: "Feb", 2: "Mar", 3: "Apr", 4: "May", 5: "Jun", 6: "Jul", 7: "Aug", 8: "Sep", 9: "Oct", 10: "Nov", 11: "Dec"}; var date = new Date(); var y = date.getFullYear(); var m = date.getMonth(); var fileNames = []; for (var i = 0; i < 4; i++) { m--; // For example, when today is July, you need June, May, Apr and Mar. if (m < 0) { m += 12; y--; } fileNames.push(months[m] + " " + y); // m--; // For example, when today is July, you need July, June, May and Apr. } var searchQuery = fileNames.map(function(e) {return 'title contains "' + e + '"'}).join(" or "); var file, files = DriveApp.getFolderById("root").searchFiles(searchQuery); 

注意:

  • 我不了解var spreadsheetNames = DriveApp.searchFiles( 。我認為保存腳本時會發生錯誤。
  • 在此示例腳本中,檢索到今天是7月,6月,5月,4月和3月。 如果要檢索7月,6月,5月和4月,請從m--;修改注釋m--; 上面的腳本。

參考文獻:

如果我誤解了您的問題,而這不是您想要的方向,我深表歉意。

嘗試這個:

function getLastFourMonthFileIds(){
  var nA=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Nov','Dec'];
  var mA=[];
  for(var i=0;i<4;i++) {
    var dt=new Date(new Date().getFullYear(),new Date().getMonth()-i,new Date().getDate());
    mA.push(nA[dt.getMonth()]+dt.getFullYear());
  }
  var fA=[];
  var files = DriveApp.getFolderById("").getFilesByType(MimeType.GOOGLE_SHEETS);
  while(files.hasNext()) {
    var file=files.next();
    if(mA.indexOf(file.getName())>-1) {
      fA.push(file.getId());
    } 
  }
  Logger.log(fA);
  return fA();
}

使用getLastUpdated()屬性的代碼示例。


function so5689562902() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "56895629";
  var sheet = ss.getSheetByName(sheetname);
  sheet.activate;

  // sundry variables
  var filearray = [];
  var filedetail = [];
  var emailarray = [];
  var emailattachments = [];
  var numberReq = 4;

  // get the files from the folder
  var folder = DriveApp.getFolderById("<<insert Folder ID>>");
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    filedetail=[];
    //Logger.log("DEBUG: file name: "+file.getName()+", file ID: "+file.getId()+", last updated: "+file.getLastUpdated());
    filedetail.push(file.getName());
    filedetail.push(file.getId());
    filedetail.push(file.getLastUpdated());
    // build cumulative array
    filearray.push(filedetail);
  }

  // sort the array by date updated
  filearray.sort(function(x,y){
    var xp = x[2];
    var yp = y[2];
    return xp == yp ? 0 : xp > yp ? -1 : 1;
  });

  // get just the first N files
  for (i=0;i<numberReq;i++){

    filedetail=[]; 
    filedetail.push(filearray[i][0] ); // name
    filedetail.push(filearray[i][1] ); // file ID
    filedetail.push(filearray[i][2] ); // last updated
    // build the array of email files
    emailarray.push(filedetail);
    emailattachments.push(filearray[i][1])
  }

  // display the details for proof
  //var arraylen = emailarray.length;
  //Logger.log("DEBUG: the array length = "+arraylen);
  //var targetrange = sheet.getRange(2,1,arraylen, 3);
  //Logger.log("DEBUG: the target range = "+targetrange.getA1Notation());
  //targetrange.setValues(emailarray);

  // sample sendEmail.
  // email attachments are included in the options
  //GmailApp.sendEmail(<<recipient>>, <<Subject>>,nonhtmlmessage, {from:senderemail,htmlBody: htmlmessage,name: senderName,replyTo:senderemail ,attachments: emailattachments  }); 

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM