Sorting 如何通过google apps脚本对google drive文件夹中的最后四个文件进行排序?

Sorting 如何通过google apps脚本对google drive文件夹中的最后四个文件进行排序?,sorting,google-apps-script,gmail,Sorting,Google Apps Script,Gmail,我在谷歌硬盘里有一些谷歌表。我只想把谷歌硬盘上最近四个月的文件发送到电子邮件。问题是月份是在文件名中定义的。所以没有时间戳 到目前为止,我正在按标题包含2019年3月或标题包含2019年4月搜索文件。如果是这样,我必须在每个月向谷歌硬盘添加一个文件后更改代码 function checkSales(){ var file, files = DriveApp.getFolderById("").searchFiles('title contains "Mar 2019" or titl

我在谷歌硬盘里有一些谷歌表。我只想把谷歌硬盘上最近四个月的文件发送到电子邮件。问题是月份是在文件名中定义的。所以没有时间戳

到目前为止,我正在按标题包含2019年3月或标题包含2019年4月搜索文件。如果是这样,我必须在每个月向谷歌硬盘添加一个文件后更改代码

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 drive中的最后四个文件发送到电子邮件

您希望使用脚本自动创建搜索查询。 您希望使用创建的搜索查询搜索文件。 例如,当今天是2019年7月时,您希望创建如下所示的搜索查询。 '标题包含2019年3月或2019年4月或2019年5月或2019年6月' 如果我的理解是正确的,这次修改怎么样?请把这当作几个答案之一

修改点: 首先,创建一个JSON对象,如下所示。 {0:1、1:2、2:3、3:4、4:5、5:6:7、7:8、8:9、9:10、10:11、11:12}。 使用此对象和日期对象创建文件名。 首先,请检查我准备的上述JSON对象的值。如果有修改值,请修改。如果包含错误的值,则无法检索文件。请小心这个

修改脚本: 请修改如下

发件人: 致: 注: 我无法理解var spreadsheetNames=DriveApp.searchFiles。我认为在保存脚本时,会发生错误。 这一点我也提到过。 在这个示例脚本中,检索今天是7月、6月、5月、4月和3月的时间。如果要检索7月、6月、5月和4月,请修改已注释的m-;上面的脚本。 参考资料: 如果我误解了你的问题,而这不是你想要的方向,我道歉

您希望使用脚本自动创建搜索查询。 您希望使用创建的搜索查询搜索文件。 例如,当今天是2019年7月时,您希望创建如下所示的搜索查询。 '标题包含2019年3月或2019年4月或2019年5月或2019年6月' 如果我的理解是正确的,这次修改怎么样?请把这当作几个答案之一

修改点: 首先,创建一个JSON对象,如下所示。 {0:1、1:2、2:3、3:4、4:5、5:6:7、7:8、8:9、9:10、10:11、11:12}。 使用此对象和日期对象创建文件名。 首先,请检查我准备的上述JSON对象的值。如果有修改值,请修改。如果包含错误的值,则无法检索文件。请小心这个

修改脚本: 请修改如下

发件人: 致: 注: 我无法理解var spreadsheetNames=DriveApp.searchFiles。我认为在保存脚本时,会发生错误。 这一点我也提到过。 在这个示例脚本中,检索今天是7月、6月、5月、4月和3月的时间。如果要检索7月、6月、5月和4月,请修改已注释的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();
}
试试这个:

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属性的代码示例

使用getLastUpdated属性的代码示例


这是有问题的,因为即使您提出的代码也需要一些编辑。你能告诉我什么是文件命名算法并给出一个例子吗?所有相关文件是否都保存在同一个文件夹中?这些文件是该文件夹中唯一的文件吗?从另一方面来说,从侧边栏浏览和选择特定文件并将其自动附加到电子邮件中可能不那么容易吗?GetLastUpdate属性返回文件上次更新的日期。选择此字段,在其上排序,然后为附件选择前N个项目。这是有问题的,因为即使是您建议的代码也需要一些编辑。你能告诉我什么是文件命名算法并给出一个例子吗?所有相关文件是否都保存在同一个文件夹中?这些文件是该文件夹中唯一的文件吗?从另一方面来说,从侧边栏浏览和选择特定文件并将其自动附加到电子邮件中可能不那么容易吗?GetLastUpdate属性返回文件上次更新的日期。选择此字段,在其上排序,然后选择附件的前N个项目。正如你所说,我应该修改什么以检索7月、6月、5月和4月?@Sriram我为我糟糕的英语技能深表歉意。当今天是七月,当您需要七月、六月、五月和四月时,请使用m-;在文件名下面。pushmonths[m]++y;。届时,请评论出m-;以下为var i=0;i<4;i++{。正如你所说,我应该修改什么来检索七月,
六月、五月和四月?斯里拉姆我为我糟糕的英语水平深表歉意。当今天是七月,当您需要七月、六月、五月和四月时,请使用m-;在文件名下面。pushmonths[m]++y;。届时,请评论出m-;以下为var i=0;i<4;i++{。这段代码对文件的命名方式进行了假设吗?它进行了假设。这是文件名:nA[dt.getMonth]+dt.getFullYear这段代码对文件的命名方式进行了假设吗?它进行了假设。这是文件名:nA[dt.getMonth]+dt.getFullYear
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();
}
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  }); 

}