【问题标题】:How to identify the most recent file in a Google Drive folder如何识别 Google Drive 文件夹中的最新文件
【发布时间】:2014-09-23 07:40:37
【问题描述】:

我在 Google 驱动器中有一个文件夹,报告工具会定期将文件转储到该文件夹​​中。文件为 .xls 格式。它们都具有相同的名称,我想识别最新的文件,以便将数据导入到 Google 工作表中。

正如您从以下内容中可以看出的那样,我是 Google Apps 脚本的新手。我一直在尝试将文件迭代器中的各种文件捕获到一个数组中,以对结果运行 Math.max 函数,最终只得到一个值。当然,一旦我确定了最新的日期,我还需要返回与之关联的 fileID——但我还没有做到这一点。我可能正朝着完全错误的方向前进,因此非常感谢任何提示/指导。

function listLatestFile(id) {
var folder = DriveApp.getFoldersByName("GmailAttachments");
var files = DriveApp.getFilesByName('mrp_out.xlsx');
while (files.hasNext()) {
 var file = files.next();
 var date = (1 - file.getDateCreated());
 var datediff = new Array(date);
 var datelast = Math.max(datediff);
 Logger.log(datelast);
 } 
//Logger.log(date);
};

【问题讨论】:

    标签: google-apps-script google-drive-api


    【解决方案1】:

    你离解决方案不是很远......我尝试使用稍微不同的方法:我将所有日期和 ID 存储在一个二维数组中,我对数组进行排序并检索 2cond 维度中的第一个元素(排序后)返回文件 ID。

    代码:

    function listLatestFile() {
      var folder = DriveApp.getFoldersByName("GmailAttachments");
      var files = DriveApp.getFilesByName('mrp_out.xlsx');
      var result = [];
      while (files.hasNext()) {
        var file = files.next();
        result.push([file.getDateCreated(),file.getId()]);
     } 
      Logger.log(result);
      var id = result.sort()[0][1];
      Logger.log(id);
      return id;// return most recent file ID
    };
    

    编辑:如果你想对排序方法有更多的控制,你可以使用更“复杂”的排序方法,如下所示:

       ...// same as above
      result.sort(function(x,y){
        var xp = x[0];// get first element in inner array
        var yp = y[0];
        return xp == yp ? 0 : xp < yp ? -1 : 1;// choose the sort order
      });    
      var id = result[0][1];
      Logger.log(id);
      return id;
    };
    

    【讨论】:

    • 非常感谢那个 Serge。我很高兴看到我在概念上朝着正确的方向前进(对执行感到遗憾)。您对我如何向现有代码添加一些功能以将最新 ID 与现有 ID 进行比较并删除不匹配的 ID 有任何想法吗?我知道如何丢弃它们,我只是不知道如何进行比较。
    【解决方案2】:

    上面发布的答案对我不起作用,所以我想出了自己的解决方案,它有效。

    显然(2017 年末)谷歌驱动器对文件进行排序。所以最后创建的文件是迭代器中的第一个。

    这是获取最新文件 ID 的代码:

     function getLatestFileId(){
    
       var folder = DriveApp.getFoldersByName("Aff Comm");
       var files = folder.next().getFiles();
       var lastFileId = files.next().getId();
    
    
       return lastFileId.toString();
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多